变量自加的疑惑

软件和网站开发以及相关技术探讨
回复
always.zhang
帖子: 7
注册时间: 2006-11-14 18:08

变量自加的疑惑

#1

帖子 always.zhang » 2006-12-08 9:54

#include <iostream>
using namespace std;
int main()
{ int i=1; i=(i++)+(i++)+(i++);
cout<<"i="<<i<<endl;
i=1;i=(++i)+(++i)+(++i);///问题在这行
cout<<"i="<<i<<endl;
i=1;i=-i++;
cout<<"i="<<i<<endl;
i=1;i=-++i;
cout<<"i="<<i<<endl;
return 0;
}

i第二个怎么是10呢?不是2+3+4吗?
头像
www1862
帖子: 781
注册时间: 2006-05-12 0:52
来自: Chongqing China
联系:

#2

帖子 www1862 » 2006-12-08 16:27

第二句似乎等价于i=i+(++i)+(++i)+(++i)
microsoftxiao
帖子: 20
注册时间: 2006-07-08 22:24

#3

帖子 microsoftxiao » 2006-12-08 20:53

你 是在 Ubuntu下编译的吧。
我在 Ubuntu 下编译下编译也是 10 ,你看下汇编就知道了。

代码: 全选

int i = 1;
00514F33  mov         dword ptr [i],1 
	i = (++i) + (++i) + (++i);
00514F3A  mov         eax,dword ptr [i] 
00514F3D  add         eax,1 
00514F40  mov         dword ptr [i],eax 
00514F43  mov         ecx,dword ptr [i] 
00514F46  add         ecx,1 
00514F49  mov         dword ptr [i],ecx 
00514F4C  mov         edx,dword ptr [i] 
00514F4F  add         edx,1 
00514F52  mov         dword ptr [i],edx 

00514F55  mov         eax,dword ptr [i]      //问题在eax寄存器上
00514F58  add         eax,dword ptr [i] 
00514F5B  add         eax,dword ptr [i] 
00514F5E  mov         dword ptr [i],eax 
我这段是 在 32bit 的 Windows XP SP2上的 Visual Studio 2003的 反汇编码。

是根编译器的 相关的。 具体看 反汇编就清楚了。
always.zhang
帖子: 7
注册时间: 2006-11-14 18:08

#4

帖子 always.zhang » 2006-12-09 10:45

对对对,正解。谢谢ls
回复