这个问题用汇编给你回答吧
5: int a = 0;
004015B8 mov dword ptr [ebp-4],0
6: int b = 5;
004015BF mov dword ptr [ebp-8],5
7: a =(++b)+(++b)+(++b);
004015C6 mov eax,dword ptr [ebp-8]
004015C9 add eax,1
004015CC mov dword ptr [ebp-8],eax b=6;
====================================
004015CF mov ecx,dword ptr [ebp-8]
004015D2 add ecx,1 b=7;
004015D5 mov dword ptr [ebp-8],ecx
====================================
004015D8 mov edx,dword ptr [ebp-8]
004015DB add edx,dword ptr [ebp-8] 7+7 =14 结果保存在edx寄存器中;
===================================
004015DE mov eax,dword ptr [ebp-8]
004015E1 add eax,1
004015E4 mov dword ptr [ebp-8],eax b=8;
===================================
004015E7 add edx,dword ptr [ebp-8] 8+[edx] 即 8+14 = 22;
004015EA mov dword ptr [ebp-4],edx 22存到a的存储单元中
上面回答为24的同志,您忽略了“+”实际是个二元操作符,出现连加的时候,只会先把前面计算出来的数值先存储起来然后再作为操作数参与下一次加法。
注:我的调试是在VC6.0环境下。《c++ programming language》一书中说,子表达式的求值顺序并没有定义,因此象题目中的值是依赖于编译器的,语言本身并没有规定,而其这种代码的可移植性也是很差的。