Wak*_*zil 5 c++ reference language-lawyer c++11 c++14
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();
Run Code Online (Sandbox Code Playgroud)
显示.
您没有正确阅读它,这才是您应该阅读的方式:
\n\n\n\n\n初始化表达式 ... 具有类类型(即 T2 是类类型) ... 并且可以\n 转换为 \xe2\x80\x9ccv3 T3,\xe2\x80\x9d 类型的左值
\n
其中初始化表达式引用回:
\n\n\n\n[...]由 \xe2\x80\x9ccv2 T2\xe2\x80\x9d 类型的表达式初始化,如下所示
\n