允许将右值绑定到非常量左值引用吗?

Posted

技术标签:

【中文标题】允许将右值绑定到非常量左值引用吗?【英文标题】:Allowed to bind an rvalue to a non-const lvalue reference? 【发布时间】:2012-12-05 23:44:30 【问题描述】:

在研究右值和右值引用时,我被指出了优秀的帖子https://***.com/a/11540204/368896,其中出现了下表:

            lvalue   const lvalue   rvalue   const rvalue
---------------------------------------------------------              
X&          yes
const X&    yes      yes            yes      yes
X&&                                 yes
const X&&                           yes      yes

请注意,该表表明右值不能绑定到非 const 左值引用。

但是,在 VS2010 中我似乎可以这样做:

class A
;

int main()

    A & a = A(); // Binding an rvalue to a non-const lvalue reference?

我的误会在哪里?

【问题讨论】:

尝试使用/W4 编译它应该会给你一个关于“邪恶扩展”的警告。 特别是警告C4239。 他们真的还没有把这个废话转过来吗? 【参考方案1】:

这是 Microsoft 编译器的编译器“扩展”(或“错误”,取决于您的观点)。 C++ 只允许将左值非 const 绑定到非 const 左值引用。

【讨论】:

以上是关于允许将右值绑定到非常量左值引用吗?的主要内容,如果未能解决你的问题,请参考以下文章

将右值引用绑定到(自动生成的)左值

对类型的非常量左值引用无法绑定错误

非常量左值引用的示例

将右值引用分配给左值时发生了啥?

在 C++ 11 中将非 const 左值引用绑定到右值是不是有效?(修改)

左值绑定到右值引用