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