相等值的常量和变量为什么放在表达式中结果不同?

来源:百度知道 编辑:UC知道 时间:2024/09/24 01:13:57
同样一个"2",我在VC中:
#include<iostream>
using namespace std;

void main(void)
{
int a = 2, b = 3;
cout<< a * b + ++b<<endl;
}
的结果是10

#include<iostream>
using namespace std;

void main(void)
{
int a = 2, b = 3;
cout<< 2 * b + ++b<<endl;
}
结果竟然是12!

编译器解释的问题,我用汇编调试了一下,做了下记录,希望对你有帮助
1: #include<iostream>
2: using namespace std;
3: void main(void)
4: { int a=2, b=3;
00401540 55 push ebp
00401541 8B EC mov ebp,esp
00401543 83 EC 48 sub esp,48h
00401546 53 push ebx
00401547 56 push esi
00401548 57 push edi
00401549 8D 7D B8 lea edi,[ebp-48h]
0040154C B9 12 00 00 00 mov ecx,12h
00401551 B8 CC CC CC CC mov eax,0CCCCCCCCh
00401556 F3 AB rep stos dword ptr [edi]//初始化堆栈
00401558 C7 45 FC 02 00 00 00 mov dword ptr [ebp-4],2//将a放入堆栈位置为[ebp-4]的地方;
0040155F C7 45 F8 03 00 00 00 mov dword ptr [ebp-8],3//将b放入[ebp-8]的地方。
5: cout<<2*b+(++b);
00401566 8B 45 F8 mov eax,dword ptr [ebp-8