【问题标题】:Lvalue reference binding左值引用绑定
【发布时间】:2014-11-13 04:32:53
【问题描述】:

我对@9​​87654322@的措辞有疑问:

对类型“cv1 T1”的引用由类型表达式初始化 “cv2 T2”如下:

——如果引用是左值引用并且 初始化表达式

  • 是一个左值(但不是位域),并且 “cv1 T1”与“cv2 T2”引用兼容,或者

  • 具有类类型(即 T2 是类类型),其中 T1 与 T2 没有引用相关, 并且可以转换为“cv3 T3”类型的左值,其中“cv1 T1”是 与“cv3 T3”参考兼容

第二种情况是否意味着初始化表达式是class-type 以及lvalue

【问题讨论】:

标签: c++ reference language-lawyer


【解决方案1】:

子句说:

有一个类类型

所以它必须是一个类类型。文档后面的示例显示它不一定是 lvalue,但我们选择了代码示例的选定部分:

struct A { };
struct B : A { operator int&(); } b;

int& ir = B(); // ir refers to the result of B::operator int&

B() 不是 左值 但正如 8.5.3/5 所说:

可以转换为“cv3 T3”类型的左值,其中“cv1 T1”与“cv3 T3”引用兼容

在这种情况下适用。

【讨论】:

    猜你喜欢
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 2017-12-06
    • 2017-04-13
    • 2011-02-14
    相关资源
    最近更新 更多