lvalue or rvalue ?
int a;
int b;
a = 3;
b = 4;
a = b;
b = a;
//error
a + b = 3;
3 = a;
Page 121:
当一个对象被用作左值时,用的是对象的身份(内存中的位置);
被用作右值时,用的是对象的值(内容);
其他说法:
Page 471:
左值有持久的状态,右值是短暂的,要么是字面常量,要么是在表达式求值过程中创建的临时对象。
判断方法:左值可以对其取地址;右值不可对其取地址。
左值是指在单个表达式的外部保留的对象,可以将左值视为具有名称的对象。所有变量(包括不能更改的 (const) 变量)都是左值。
右值是一个不在使用它的表达式的外部保留的临时值。
参考 https://msdn.microsoft.com/zh-cn/library/f90831hc.aspx
理解:
1. a++是右值,而++a是左值:
int a = 10;
int &&rr = a++; //后置版本返回原值a的一个副本,是临时的;
int &lf = ++a; //前置版本返回递增后的原值,是持久的;
2. 右值引用也是一个左值:
int &&rri = 10; //通过右值引用,临时变量变得持久;
int &lri = rri;