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();
节目。
答案 0 :(得分:4)
你没有正确阅读,你应该如何阅读它:
初始化表达式...具有类类型(即T2是类类型)......并且可以 转换为“cv3 T3”的左值,
其中初始化表达式引用:
[...]由“cv2 T2”类型的表达式初始化,如下所示
答案 1 :(得分:1)
否,您的解释是错误的。
T1 =
初始化的引用T2 =
班级类型T3 =
T2
可以转换为引用的代码段说明T2
(即类类型)可以转换为T3
类型的左值,其中T1
与T3
引用兼容,但T1
与<{1}} 引用无关。