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

最佳答案

理由是,对临时变量进行突变几乎没有任何意义。这样做的任何尝试都可能是编程错误,而不是刻意的决定。

原型(prototype)示例如下。假设允许绑定(bind)到非常量引用。

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

尽管有时确实希望对临时变量进行突变,但这通常是出于与对左值进行突变的原因完全不同的原因。发明了右值引用以适应这些情况。

09-10 03:23
查看更多