this指针

this指针

1. 使用范围

1. 只能在成员函数中只用

2. 全局函数中不可使用
全局函数是定义在类外的函数,成员函数就是定义在类中的函数。

3. 静态函数中不可使用

class a
{
    static int fun(){}
};

2. 创建时间

this在成员函数的开始执行前构造,在成员的执行结束后清除。

3. 存放位置

this指针会因编译器不同而有不同的放置位置。
可能是栈,也可能是寄存器,甚至全局变量。
在汇编级别里面,一个值只会以3种形式出现:立即数、寄存器值和内存变量值。不是存放在寄存器就是存放在内存中,它们并不是和高级语言变量对应的。
在实际应用中,this应该是个寄存器参数

注意:

1. this指针不占用对象的空间

this相当于非静态成员函数的一个隐含的参数,不占用对象的空间。它跟对象之间没有包含关系,或者直接占用一个寄存器。

2. this指针是如何传递类中的函数的?

大多数编译器通过ecx寄存器传递this指针。事实上,这也是一个潜规则。一般来说,不同编译器都会遵从一致的传参规则,否则不同编译器产生的obj就无法匹配了。

3. 只有获得一个对象后,才能通过对象使用this指针

this指针只有在成员函数中才有定义。
因此,获得一个对象后,也不能通过对象使用this指针。
所以,我们无法知道一个对象的this指针的位置(只有在成员函数里才有this指针的位置)。
当然,在成员函数里,你是可以知道this指针的位置的(可以通过&this获得),也可以直接使用它。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值