cout<<"z: c:"<<z<<c<<endl;
问输出z, c的值。 直接得到了 1, 2. 但是结果错了。 为什么, 自己以为答案给错了呢, 一直纠结了好几天了,决心用程序看看。
bool z ;
int a = 1;
004114DE C7 45 EC 01 00 00 00 mov dword ptr [a],1
int b = 2;
004114E5 C7 45 E0 02 00 00 00 mov dword ptr [b],2
int c = 1;
004114EC C7 45 D4 01 00 00 00 mov dword ptr [c],1
z = a && b || ++c;
004114F3 83 7D EC 00 cmp dword ptr [a],0
004114F7 74 06 je wmain+3Fh (4114FFh)
004114F9 83 7D E0 00 cmp dword ptr [b],0
004114FD 75 17 jne wmain+56h (411516h)
004114FF 8B 45 D4 mov eax,dword ptr [c]
00411502 83 C0 01 add eax,1
00411505 89 45 D4 mov dword ptr [c],eax
00411508 75 0C jne wmain+56h (411516h)
0041150A C7 85 0C FF FF FF 00 00 00 00 mov dword ptr [ebp-0F4h],0
00411514 EB 0A jmp wmain+60h (411520h)
00411516 C7 85 0C FF FF FF 01 00 00 00 mov dword ptr [ebp-0F4h],1
00411520 8A 8D 0C FF FF FF mov cl,byte ptr [ebp-0F4h]
00411526 88 4D FB mov byte ptr [z],cl
cout<<"z: c:"<<z<<c<<endl;
。。。。。略
注意以上红色部分, 可以看到,生成的汇编语言很直白的告诉我们, 当a, b非0时, 直接将1给了z, 之后并没有再用到c,也就不可能c+1了。 这又让我想起, &&, || 的用法。 && 前边为真才去计算&&后边,否则不再计算机; || 当前边为真不再计算后边。
这脑子,不好使了。