我对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
?
答案 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”引用兼容
在这种情况下适用。