在typedef中警告const

时间:2011-09-11 19:37:43

标签: c++ warnings const typedef

当我使用icc 11编译C ++程序时,它发出了警告:

  

警告#21:类型限定符在本声明中无意义
  typedef const direction_vector_ref_t direction_vector_cref_t;

它说const毫无意义。我对此感到好奇,因为如果typedef扩展,它将转变为const array<double,3>&,而const肯定是有意义的。为什么会发出此警告?

2 个答案:

答案 0 :(得分:6)

direction_vector_ref_t,我压力,它的参考。引用是const设计,因此将const添加到引用是没有意义的。你可能想要的是引用一个const对象,这是一个typedef无法完成的。您将不得不重复略微修改的typedef定义。

只是为了澄清:

typedef T& ref;
typedef const T& cref;
typedef const ref cref;

最后一行与第一行相同,而不是第二行。一旦你输入了T&amp; T&amp;作为ref,则ref引用对T类型的引用。如果你向它添加const,那么你得到一个对T类型的const引用,而不是对const T类型的引用。

答案 1 :(得分:4)

你确定吗?尝试:

array<double, 3> a;
direction_vector_cref_t b = a;
b[0] = 1.0;

这里的问题是,当你使用typedef时,它在概念上会在类型周围添加括号,所以你在概念上使用const (array<double, 3>&)而不是(const array<double, 3>)&,所以你实际上并没有使用它对象常数。所以你的宣言更像是:

typedef array<double, 3>& const direction_vector_cref_t;

在上面,变量的const(而不是引用类型)需要推迟到以后。