左值参考绑定

时间:2014-11-13 04:32:53

标签: c++ reference language-lawyer

我对N3797::8.5.3/5 [dcl.init.ref]中的措辞有疑问:

  

对类型“cv1 T1”的引用由类型的表达式初始化   “cv2 T2”如下:

     

- 如果引用是左值引用而且是   初始化表达式

     
      
  • 是左值(但不是位字段),和   “cv1 T1”与“cv2 T2”或

  • 参考兼容   
  • 有一个类类型(即T2是类类型),其中T1与T2没有引用相关,   并且可以转换为“cv3 T3”类型的左值,其中“cv1 T1”是   参考兼容“cv3 T3”

  •   

第二种情况是否意味着初始化表达式是class - 类型以及lvalue

1 个答案:

答案 0 :(得分:0)

该条款说:

  

有一个班级类型

所以它必须是类类型。文档中的下面的示例显示它不一定是左值,而是采用我们所拥有的代码示例的选定部分:

struct A { };
struct B : A { operator int&(); } b;

int& ir = B(); // ir refers to the result of B::operator int&

B()不是左值,但是8.5.3/5说:

  

可以转换为“cv3 T3”类型的左值,其中“cv1 T1”与“cv3 T3”引用兼容

在这种情况下适用。