看了Thinking c++第10章的傳值方式傳遞和返回這一節(jié)。不是很明白。
午休的時(shí)候。寫了一個(gè)例子,反編譯了看看。
#include <stdio.h>
class A
{
public:
int i;
int ii;
int iii;
};
void fun1(A a){
a.i++;
}
int main(int argc, char *argv[])
{
printf("start...\n");
A a;
a.i = 1;
a.ii = 2;
a.iii = 3;
fun1(a);
printf("end...\n");
return 0;
}
mov dword ptr ss:[ebp-C], 1 ;i
mov dword ptr ss:[ebp-8], 2 ;ii
mov dword ptr ss:[ebp-4], 3 ;iii
sub esp, 0C
mov eax, esp
mov ecx, dword ptr ss:[ebp-C]
mov dword ptr ds:[eax], ecx
mov edx, dword ptr ss:[ebp-8]
mov dword ptr ds:[eax+4], edx
mov ecx, dword ptr ss:[ebp-4]
mov dword ptr ds:[eax+8], ecx
call 00401000 ;fun1的地址
看了上面的匯編代碼,基本都明白了。
把對(duì)象A的成員變量按著定義的順序一個(gè)一個(gè)的COPY到棧中。