a++,意思是先返回(赋值),再加1.等同于伪代码 ret=a; a=a+1
count << a++ << a
第一步,进行解析
从右面扫描。a不需要动,a++要解析
ret=a
a=a+1
cout <<ret<<a
输出就是 1 2
此时a是2
cout <<a << a++
伪代码
ret=a
a=a+1
count << a << ret
输出就是3 2另外,语句的解析过程,是从右往左的。所以cout << fun1() << func2() ,是先执行func2,在执行func1,执行完后,结果存贮在临时变量中,输出时,按照从左往右结果进行。
再来个复杂些的例子:
b=1
printf( "%d %d %d", b++, b++, b )
其中两个b++都需要解析,返回结果分别存放在ret1 和ret2中。
注意,从右往左解析:print( ret1, ret2, b)
最右面的b不需要解析
然后是中间的b++:
ret2=b 注意,ret2此时为1
b=b+1
然后是左面的b++
ret1=b 注意,此时b已经是2了
b+b+1
所以执行结果为: 2 1 3