C++中this指针的理解及用法

关于this指针有一个经典的解释
当我们在进入一个房子之后,可以看见房子里的桌子,椅子、地板等,但是看不到房子的全貌。对于一个类的实例来说,你可以看到它的成员函数、成员变量,但是实例本身呢?this是一个指针,它时时刻刻指向这个实例。
那么什么是this指针呢?
this指针是类的一个自动生成、自动隐藏的私有成员,它存在于类的非静态成员函数中,指向被调用函数所在的对象。全局仅有一个this指针,当一个对象被创建时,this指针就存放指向对象数据的首地址。-->来自百度百科
this指针的用处:
一个对象的this指针并不是对象本身的一部分,不会影响对象的大小,this指针的作用域是在类的内部,当在类的非静态函数中访问类的非静态成员时,编译器会自动将对象本身的地址传给函数,每个类的非静态函数的参数列表中都有一个隐含的this参数存储着对象的地址,通过这个this指针函数可以对对象的非静态成员进行访问。
要注意:this指针存在于类的成员函数中,指向被调用函数所在的类实例的地址
全是文字实在是太干了,来串代码解解乏:

汇编代码:


从汇编语言可以很清楚的看出来编译器把对象的地址赋给了fun函数中的this指针但是这个指针我们并没有对它进行定义所以说他是一个隐藏在函数参数列表中的由编译器自动生成的形参,它里面存储的是调用函数所在对象的地址
类的this指针有一下特点:
(1)this指针只能在类的非静态成员中使用 全局函数和静态函数都不存在this指针实际上非静态成员函数参数列表的第一个是默认的this指针 T* const this。就例如上面的fun函数从表面上看是只有一个参数但是在编译器看来一共有两个为fun(test * const this,int  x);
(2)this指针的适用范围是函数开始前创建,函数执行结束后销毁
使用this指针要知道的一些常识:
(1)创建时间和销毁时间分别是在函数开始之前,和函数体执行结束后。
(2)this指针的存储位置和编译器有关,可能是存贮在栈上或者是存储在寄存器中,还有可能定义一个全局变量来存储。
(3)this指针访问类中的元素是类似结构体指针访问结构体中的成员。
(4)this指针只有在成员函数中才有定义,说以无法通过类对象来使用this指针,换句话讲this指针中有再类内的成员函数中才能使用,在类外我们无法使用,且也无法知道this指针的位置。
(5)不仅是类的非静态成员函数中有this指针,在结构体的非静态成员函数中也有this指针
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值