左值,右值,自增,自减

2013年4月10日 由 Creater 留言 »
下面这个题,你能做对吗?
int a = 4;
(A)a += (a++);
(B) a += (++a) ;
(C) (a++) += a;
(D) (++a) += (a++);
a 分别等于多少?
++a是先自增,然后返回增加后的变量a,a是变量,本来就可以做左值,所以(a++)++正确;a++是后自增——在表达式里值还是原来的值——返回的是一个等于a+1的临时变量,临时变量是有const属性的,不可以更改,所以(a++)++错误。
左值和右值
左值(left value):出现在赋值表达式的左边的表达式,其作用为存放数据空间,且存放是允许的。缩写:lvalue
右值(right value):只能出现在赋值表达式的右边。缩写:rvalue
左值也可以作为右值表达式,变量可以是左值,也可以为右值,但常量只能是右值。
a=b   // b是变量,在这里是左值,也可以作为右值
a=8   // 8是常量,只能作为右值
(a=4)=28   //  C++语法规定:a=4为左值,28为右值操作符的优先级与结合性
c = a + b           // OK
c = a + + b         // Error
c = a + + + b       // OK a ++ + b
c = a + + + + b     // Error a ++ ++ b
c = a + + + + + b   // Error a ++ ++ + b

广告位

发表评论

你必须 登陆 方可发表评论.