很有趣的问题。其实在编译时,系统是先将第一个++i计算机出值,此时i=4,再计算第二个++i,使i=5。这时进行加运算,即j=5+5+(++i) =>j=10+(++i)。
最后再计算++i,使i=6。进行加运算(j=10+6)。所以j=16。
编译后的汇编语言如下:
0040102F mov eax,dword ptr [ebp-4]
00401032 add eax,1
00401035 mov dword ptr [ebp-4],eax
00401038 mov ecx,dword ptr [ebp-4]
0040103B add ecx,1
0040103E mov dword ptr [ebp-4],ecx
00401041 mov edx,dword ptr [ebp-4]
00401044 add edx,dword ptr [ebp-4]
00401047 mov eax,dword ptr [ebp-4]
0040104A add eax,1
0040104D mov dword ptr [ebp-4],eax
00401050 add edx,dword ptr [ebp-4]
00401053 mov dword ptr [ebp-8],edx。