在下列表达式选项中,正确的是( C )
A. ++(a++)
B. a++b
C. a+++b
D. a++++b


左值和右值

左值:存在变量名,可以被取地址,有对应的内存地址,可以被修改、赋值和引用等。
右值:不存在变量名,没有对应的地址,表示临时的值,通常是一个常量、立即数或表达式的结果。

在使用时,左值可以作为右值,但右值不能作为左值。如下代码:

1
2
int x; 
x = 10;

x 是一个左值,10 是一个右值,可以写 x = 10,但不能写 10 = x

自增自减的前后版本

自增自减的前置和后置都必须作用于左值运算对象。前置版本将对象作为左值返回,后置版本则将对象原始值的副本作为右值返回。
++ 和 – 运算符重载

优先级:后缀(自左向右) > 前缀(自右向左) > 加减(自右向左)
C++ 运算符的优先级和关联性表

A: 先 a 后缀加,返回原值副本作为右值,再前缀加,但是前缀加不能作用于右值对象,错误。
B: 先 a 后缀加,返回原值副本作为右值,然后和 b 之间没有操作符了,错误。
C: 先 a 后缀加,返回原值副本作为右值,然后和 b 相加,正确(并没有试图修改右值)。
D: 同理 B,操作符不够,错误。