Re: [cpp]很基础的问题,请高手解答
li guojian
guojianlee at gmail.com
Fri Dec 15 12:03:48 CST 2006
On 12/14/06, Science <gis at 126.com> wrote:
> int i = 1;
> int j = (++i) + (++i) + (++i);
> cout << j << endl;
> 为什么j输出10?
>
> int i = 1;
> int j = (i++) + (i++) + (i++);
> cout << j << endl;
> 为什么输出3?
>
> 以上都是在VC6+SP6环境
>
>
>
vc6+sp6环境下生成的汇编
6: int i = 1;
00401578 mov dword ptr [ebp-4],1
7: int j = (++i) + (++i) + (++i);
0040157F mov eax,dword ptr [ebp-4]
00401582 add eax,1
00401585 mov dword ptr [ebp-4],eax
///i++;
00401588 mov ecx,dword ptr [ebp-4]
0040158B add ecx,1
0040158E mov dword ptr [ebp-4],ecx
//i++;
00401591 mov edx,dword ptr [ebp-4]
///int c=i;
00401594 add edx,dword ptr [ebp-4]
// c+=i;
00401597 mov eax,dword ptr [ebp-4]
0040159A add eax,1
0040159D mov dword ptr [ebp-4],eax
//i++;
004015A0 add edx,dword ptr [ebp-4]
/// c+=i;
004015A3 mov dword ptr [ebp-8],edx
// j=c;
///////////
综上所诉
int j = (++i) + (++i) + (++i);被编译成:
/////
int j;
i++;
i++;
int c=i;
c+=i;
i++;
c+=i;
j=c;
所以结果j=10
具体的原因是:在语句中,++i,i++,是复合的运算,就象a+b+c,也是复合运算
会被编译成多个句子,具体怎么分解复合运算,没有具体标准,不同的编译器有不同的
算法。++i和i++的区别就是在运算前分解和运算后分解。
int j = (++i) + (++i) + (++i);包含了两种类型的符合运算,有点复杂,可以先理解
int j=(++i)+(++i);和int d=a+b+b;的原因,再去理解,可能会简单点。
关于 int j = (i++) + (i++) + (i++); 原理相同不在赘述
More information about the Cpp
mailing list