左值右值、自增自减的前后区别
在下列表达式选项中,正确的是( C )
A.++(a++)
B.a++b
C.a+++b
D.a++++b
左值和右值
左值:存在变量名,可以被取地址,有对应的内存地址,可以被修改、赋值和引用等。
右值:不存在变量名,没有对应的地址,表示临时的值,通常是一个常量、立即数或表达式的结果。
在使用时,左值可以作为右值,但右值不能作为左值。如下代码:
1 | int x; |
x
是一个左值,10
是一个右值,可以写 x = 10
,但不能写 10 = x
。
自增自减的前后版本
自增自减的前置和后置都必须作用于左值运算对象。前置版本将对象作为左值返回,后置版本则将对象原始值的副本作为右值返回。
++ 和 – 运算符重载
优先级:后缀(自左向右) > 前缀(自右向左) > 加减(自右向左)
C++ 运算符的优先级和关联性表
A: 先 a 后缀加,返回原值副本作为右值,再前缀加,但是前缀加不能作用于右值对象,错误。
B: 先 a 后缀加,返回原值副本作为右值,然后和 b 之间没有操作符了,错误。
C: 先 a 后缀加,返回原值副本作为右值,然后和 b 相加,正确(并没有试图修改右值)。
D: 同理 B,操作符不够,错误。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 PEACE's Blog!