我的解释是否正确n3797 8.5.3 / 5?

时间:2014-02-20 18:23:07

标签: c++ c++11 reference language-lawyer 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();

节目。

2 个答案:

答案 0 :(得分:4)

你没有正确阅读,你应该如何阅读它:

  

初始化表达式...具有类类型(即T2是类类型)......并且可以   转换为“cv3 T3”的左值,

其中初始化表达式引用:

  

[...]由“cv2 T2”类型的表达式初始化,如下所示

答案 1 :(得分:1)

,您的解释是错误的。

  • T1 =初始化的引用
  • T2 =班级类型
  • T3 = T2可以转换为
  • 的左值

引用的代码段说明T2(即类类型)可以转换为T3类型的左值,其中T1T3引用兼容,但T1 与<{1}} 引用无关。