您的位置:首页 > 其它

复习基础知识: i++ 和 ++i 在语句的的执行顺序

2013-01-15 20:25 399 查看
请先看下题: 下面两句调用 test 函数后面的注释正确吗??

#include <iostream>
using namespace std;

void test(int i) { cout << i << endl;} // 函数定义

int _tmain(int argc, _TCHAR* argv[])
{
int i = 0;  // 定义并初始化变量
test(i++);  // 这一句可以这样理解吗, 相当于test(0); 和 i += 1;(这一句的具体形式不重要,目的就是让i自身增加1, 这里为了讲解的方便,就写 i+=1;  下同)

int j = 0;
test(++j);  // 这一句可以理解成 相当于 j+=1; 和 test(1) 吗???

return 0;
}


如果你认为这样的话, 那看一下对应的汇编代码:

int i = 0; // 定义并初始化变量

mov dword ptr [i],0

test(i++);

mov eax,dword ptr [i]

mov dword ptr [ebp-0DCh],eax // dword ptr [ebp-0DCh] 这个相当于临时变量

mov ecx,dword ptr [i]

add ecx,1 // 关注这句

mov dword ptr [i],ecx

mov edx,dword ptr [ebp-0DCh]

push edx

call test (10611B3h) // 关注这句

add esp,4

int j = 0;

mov dword ptr [j],0

test(++j);

mov eax,dword ptr [j]

add eax,1 // 关注这句

mov dword ptr [j],eax

mov ecx,dword ptr [j]

push ecx

call test (10611B3h) // 关注这句

add esp,4

看汇编代码明白了 到底谁先谁后的了吧....

还是不明白 ,可以看下<< More Effective C++>> 这本书,关于 操作符 前置、后置++ 的内容,那里讲得够清楚了吧....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: