1. int k=2;
k = ( (k==2) ? k--: 5);
cout<<k<<endl; //输出2
2. int k = 2;
if (k==2)
{
k = k--;
}
else
{
k = 5;
}
cout<<k; //输出1
分析:
转成汇编看一下
k = ( (k==2) ? k--: 5)
00401025 cmp dword ptr [k],2
00401029 jne main+3Fh (40103Fh)
0040102B mov eax,dword ptr [k]
0040102E mov dword ptr [ebp-0D0h],eax
00401034 mov ecx,dword ptr [k]
00401037 sub ecx,1
0040103A mov dword ptr [k],ecx
0040103D jmp main+49h (401049h)
0040103F mov dword ptr [ebp-0D0h],5
00401049 mov edx,dword ptr [ebp-0D0h]
0040104F mov dword ptr [k],edx
注意红色部分,编译器先把三目运算符的结果2存到了一块临时区域,最后又把2赋给k
k=k--;
00401025 mov eax,dword ptr [k]
00401028 mov dword ptr [k],eax
0040102B mov ecx,dword ptr [k]
0040102E sub ecx,1
00401031 mov dword ptr [k],ecx
可以看到最后一步计算的是k--,所以结果是1
k = ( (k==2) ? k--: 5);
cout<<k<<endl; //输出2
2. int k = 2;
if (k==2)
{
k = k--;
}
else
{
k = 5;
}
cout<<k; //输出1
分析:
转成汇编看一下
k = ( (k==2) ? k--: 5)
00401025 cmp dword ptr [k],2
00401029 jne main+3Fh (40103Fh)
0040102B mov eax,dword ptr [k]
0040102E mov dword ptr [ebp-0D0h],eax
00401034 mov ecx,dword ptr [k]
00401037 sub ecx,1
0040103A mov dword ptr [k],ecx
0040103D jmp main+49h (401049h)
0040103F mov dword ptr [ebp-0D0h],5
00401049 mov edx,dword ptr [ebp-0D0h]
0040104F mov dword ptr [k],edx
注意红色部分,编译器先把三目运算符的结果2存到了一块临时区域,最后又把2赋给k
k=k--;
00401025 mov eax,dword ptr [k]
00401028 mov dword ptr [k],eax
0040102B mov ecx,dword ptr [k]
0040102E sub ecx,1
00401031 mov dword ptr [k],ecx
可以看到最后一步计算的是k--,所以结果是1