左值与右值的理解:当一个对象被用作右值的时候,用的是对象的值(内容),往往是占用的临时内存;当对象被用作左值的时候,用的是对象的身份(内存中的位置),往往是占用的固定内存。
int a = 1; // a是一个左值
int b = 2; // b是一个左值
int c = a + b; // +运算符需要右值,a和b都转换成右值,并且返回一个右值
// 赋值运算符需要一个(非常量)左值作为左侧运算对象, 其返回对象也是一个左值
10 = a; // 错误,字面值是右值
a+b = 11; // 错误,算术表达式是右值
// 解引用运算符*、 取地址运算符&
int *ptr = &a; // &运算符将左值a转变成右值
*ptr = 10; // *解引用运算符的求值结果是左值
// 下标运算符
int array[] = {0, 1, 2, 3};
array[1] = 10; // []下标运算的求值结果是左值
++a; // 自加运算符 返回结果为左值
cin >> a >> b; // 输入、输出运算符 返回结果为左值