标题:
a++ 与 ++a的一个区别
[打印本页]
作者:
51黑黑
时间:
2016-1-6 03:48
标题:
a++ 与 ++a的一个区别
大家都知道a++是先取a的值再把a=a+1,++a先把a=a+1,再取a的值。
其实其区别不仅如此,看看下面的问题:
下面的表达式是对或错?是对的话请写出a的值。
int a = 4;
A)(a++) += a;
B)(++a) += a;
在编译器中我们可以得出结论:
A是错误的,而B是正确的,并且B中的a的值为10.
解析:
A)(a++) += a;//
可以拆分为下面的表达式:
const int __temp = a;
__temp = __temp + a;//注意:因为当运算“=”表达式时,编译器会先计算“=”的右边,所以这里的a是原来的值,而不是a++后的值。
a++;
之所以错误,是因为__temp是编译器自动加的临时值是const类型的,不能给其赋值。
B)(++a) += a;
可以拆分为下面的表达式:
a = (a+1) + a;//注意:在(a+1) + a 中,(a+1)是因为“=”左边的++a。
a++;
没用进行违规的操作,所以能通过的。
额外思考:
1)编译器自动添加的临时变量是不可以被程序员修改的;
2)进行b = ++a;运算比进行b = a++;更快更节省空间;b = a++;比b = ++a;多了__temp = a;的运算和__temp的空间开销。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1