【发布时间】:2014-03-21 21:37:44
【问题描述】:
n3797 中的第 8.5.3/5 段:
对类型“cv1 T1”的引用由类型为的表达式初始化 “cv2 T2”如下:
如果引用是左值引用和初始化表达式
是一个左值(但不是位域),并且“cv1 T1”与“cv2 T2”是引用兼容的,或者
有一个类类型(即T2是一个类类型),其中T1与T2没有引用相关,可以转化为左值类型 “cv3 T3”,其中“cv1 T1”与“cv3 T3”引用兼容(此 通过枚举适用的转换来选择转换 函数(13.3.1.6)并通过重载选择最好的函数 决议 (13.3)),
...
英语不是我的母语,但在我看来,粗体字(我的重点)表示T1 可以转换为 cv3 T3 类型的左值,我相信是不正确的。据我了解,T2是必须转换为cv3 T3的类型,例如:
struct B : A { operator int&(); } b;
int& ir = B();
显示。
【问题讨论】:
-
N3485是最后一个 C++11 草案,您引用的是C++1y,请参阅 Where do I find the current C or C++ standard documents? -
@ShafikYaghmour 感谢您的链接。
-
既然你引用了
N3797,这也适用于C++1y。N3485中的措辞几乎相同。
标签: c++ c++11 reference language-lawyer c++14