看了Thinking c++第10章的傳值方式傳遞和返回這一節。不是很明白。
午休的時候。寫了一個例子,反編譯了看看。
#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的地址
看了上面的匯編代碼,基本都明白了。
把對象A的成員變量按著定義的順序一個一個的COPY到棧中。