【发布时间】:2017-04-15 23:59:52
【问题描述】:
允许使用这个非常简单的代码:
class s
{
public:
};
const s& tt = std::move(s()); // Also valid without 'const'
但现在我想知道为什么允许这样做..
首先我们使用std::move并将右值(临时)标记为右值引用,但是为什么左值引用可以绑定到右值引用?
是不是因为右值引用也是右值?
导致左值引用绑定到右值引用的基本原理(或标准引号)是什么?可以做到我明白了。
编辑:msvc2015 允许非常量左值引用绑定到右值引用,问题仍然是 const 左值引用绑定到右值引用。抱歉,我应该指定我使用的编译器。
【问题讨论】:
-
我发现这个问题有点难以解析,因为您使用的术语错误:在
T & t = u;,我们说“(参考)t绑定到值@987654326 @。”此外,请注意,引用总是绑定到 values;引用不会“绑定到另一个引用”。引用类型总是与变量(或函数)相连,从不与表达式相连。在通常使用的术语中,问题可能会变成“为什么左值引用绑定到右值?”,这是一个很好的问题(答案很简单)。 -
@KerrekSB 糟糕,我编辑了问题以(希望)使用正确的术语
-
它can not compile 没有
const -
@ElProfesor: 嗯...标准通常说“引用绑定到表达式”,实际上。
-
@ElProfesor:是的,我想这是真的 :-)
标签: c++ rvalue-reference rvalue