C++ this指针

今天,我们一起来了解关于this指针的使用。

在C++中,类可以分成变量和函数,它们各自占有一块区域,而所有实例化对象在另一块区域。假如我们定义了同类的多个对象,那么当一个对象去调用该函数时,程序怎么判断此时函数是被哪个对象调用的呢?

这时,程序是用this指针来判断的。

一.this指针使用方式

假设一个名叫color的类,里头有一个打印颜色的函数,和一个字符指针指向的颜色名。

当我们定义多个color对象,假如此时调用对象red的打印函数,在编译时,函数参数里会自动生成一个指向类的指针this指向red

在函数内部打印字符指针参数时,会自动调用this指针指向的red,让编译器知道这个参数是red对象的。

这样编译器就可以利用this指针来判断此时的函数、参数是哪个对象的了。

我们看看实例:

我们只需要判断this所指向的地址与A的地址是否相符即可。

 此时我们可以得到A的地址。

此时,我们发现在调用打印颜色函数时,this指针指向与A的地址相符。

可以确定,编译器是利用了this指针来确定调用对象的,从而确定该调用哪个实参。

同时,我们也能发现,this指针的类型是类指针类型。 

 二.this指针存储

通常而言this指针是存在栈或寄存器中。这很好理解,存在栈中便于一起与函数调用,存在寄存器中可以提高效率。

我们依旧使用刚才的实例来一探究竟:

这次,我们直接调用打印颜色函数。

 转到反汇编中,我们可以发现,第一个动嘴就是将this指针mov到eax中。而eax就是寄存器的一种。

 

  • “大多数优秀的程序员从事编程工作,不是因为期望获得报酬或得到公众的称赞,而是因为编程是件有趣的事儿。”——林纳斯·托瓦兹(Linus Torvalds)

如有错误,敬请斧正 

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

就要 宅在家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值