将临时附加到const的引用时出错

时间:2011-05-20 11:28:47

标签: c++ reference const temporary

  

可能重复:
  typedef and containers of const pointers

为什么代码会发出错误?

int main()
{
  //test code
  typedef int& Ref_to_int;
  const Ref_to_int ref = 10; 
}

错误是:

  

错误:从'int'类型的临时表中初始化'int&'类型的非const引用

我阅读prolonging the lifetime of temporaries上的帖子,其中说临时文本可以绑定到const的引用。那为什么我的代码没有被编译?

3 个答案:

答案 0 :(得分:4)

此处ref的类型实际上是reference to int而不是const reference to int。 const限定符被忽略。

$ 8.3.2说

  

除非通过使用typedef(7.1.3)或模板类型参数(14.3)引入cv限定符,否则Cv限定引用的格式不正确,在这种情况下,cv限定符将被忽略。

const Ref_to_int ref;相当于int& const ref;而不是const int& ref

答案 1 :(得分:1)

const与typedef混合在一起并不像你想象的那样;有关详情,请参阅this question。这两行是等价的:

const Ref_to_int ref;
int& const ref;

您正在寻找:

const int& ref;

修复它的一种方法是将它包含在typedef本身中(尽管你应该重命名它):

typedef const int& Ref_to_int;

答案 2 :(得分:0)

您无法向typedef添加其他说明符。它不像宏一样工作。

您的代码实际上是

int& const ref = 10;  // error

无效。