this指针作为函数隐含参数传递的方法

c++中的类成员函数中有个隐含的this指针做参数,参数传递过程原来是这样的(VC++6.0):
测试代码:

#include <iostream>
using namespace std;
class A {
public:
    
void f() {
        cout << "A::f" << endl;
    }
};
int main() {
    A a;
    a.f();
    
return 0;
}

调试程序执行到a.f()处,查看汇编代码:
a.f();
lea     ecx, [ebp - 4]     ;这里便是a 的地址,也就是一个this指针。
call    @ILT+0(A::f) (00401005)   
...
00401005 E9 C6 03 00 00       jmp         A::f (004013d0)
...
6:        void f() {
004013D0 55                   push        ebp
004013D1 8B EC                mov         ebp,esp
004013D3 83 EC 44             sub         esp,44h
004013D6 53                   push        ebx
004013D7 56                   push        esi
004013D8 57                   push        edi
004013D9 51                   push        ecx   ;上面已经知道了,ecx中保存的是this指针
004013DA 8D 7D BC             lea         edi,[ebp-44h]
004013DD B9 11 00 00 00       mov         ecx,11h
004013E2 B8 CC CC CC CC       mov         eax,0CCCCCCCCh
004013E7 F3 AB                rep stos    dword ptr [edi]
004013E9 59                   pop         ecx  ;弹栈,ecx中是刚才压入的this指针。
004013EA 89 4D FC             mov         dword ptr [ebp-4],ecx  ;把this指针放在为函数临时开辟的栈空间中,就像正常传过来的参数一模一样。
又写了几个复杂点的类,发现在调用普通成员函数的时候都做了如此处理。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值