【问题标题】:Is my interpretation correct about n3797 8.5.3/5?我对 n3797 8.5.3/5 的解释是否正确?
【发布时间】: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();

显示。

【问题讨论】:

标签: c++ c++11 reference language-lawyer c++14


【解决方案1】:

您没有正确阅读它,这就是您应该阅读它的方式:

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

其中初始化表达式指回:

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

【讨论】:

    【解决方案2】:

    不,你的解释是错误的。

    • T1 = 被初始化的引用
    • T2 =类类型
    • T3 =T2可以转换成的左值

    引用的 sn-p 声明T2(即类类型)可以转换为类型为T3 的左值,其中T1 与T3 引用兼容,但T1 不与T2的引用相关。

    【讨论】:

    • 在我看来,这两个答案都是正确的,但可以更好地表达。
    • @david.pfx:然后发布一个更好的答案?
    • @david.pfx:这不是 Stack Overflow 的工作方式。接受是针对提问者的。答案是针对社区的。如果你有什么有用的话,欢迎补充。
    猜你喜欢
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    相关资源
    最近更新 更多