请先看下题: 下面两句调用 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++>> 这本书,关于 操作符 前置、后置++ 的内容,那里讲得够清楚了吧....