为什么rvalue不能用于初始化左值引用?

时间:2018-03-16 07:29:29

标签: c++ rvalue-reference rvalue

我可以const A& a = A()A&& a = A(),但为什么我不能A& a = A()

3 个答案:

答案 0 :(得分:2)

理由是,改变一个临时的很少有意义。任何这样做的尝试都可能是编程错误而不是故意的决定。

原型示例如下。假设允许绑定到非const引用。

void foo(int& x, int& y); // sets x and y
int xx, yy;
foo(xx, yy); // xx and yy are set
// now make a small change...
void foo(long& x, long& y); // upgrade
int xx, yy; // forgot to change here 
foo(xx, yy); // silently breaks

虽然人们有时想要改变一个临时的,但它通常与改变左值的完全不同。发明Rvalue引用是为了适应这些情况。

答案 1 :(得分:0)

通过“初始化左值参考”,您可以参考定义参考从那时开始引用的左值。
因此,左值引用将传播对右值“初始化”的任何访问 即你会尝试访问一个像左值这样的rvalue表达式 在所有情况下都不可能访问左值这样的右值。

这就是原因。

答案 2 :(得分:0)

右步是暂时的 - 它很快就要死了。创建对这样一个对象的左值引用将是灾难的一个方法,因为引用将很快成为对死对象的悬空引用。