C++知识总结——this指针

2.this指针

2.1为什么引入this指针

​​​  当我们在类中定义了一个变量,同时在类成员函数中定义了同一变量时,也就是说变量名重复时,但是我们想使用类中定义的变量,这个时候我们该怎么办呢?这个时候就是this指针大显身手的时候了。为此我们引入this指针的概念。

2.2this指针概念

  1. this是指向实例化对象本身时候的一个指针,里面存储的是对象本身的地址,通过该地址可以访问内部的成员函数和成员变量。this 指针是所有成员函数(包括构造函数和析构函数)的隐含参数。
  2. 一个对象的this指针并不是对象本身的一部分,其不会影响sizeof(对象)的结果,this指针的类型取决于使用this指针的成员函数类型以及对象类型。
  3. this指针的作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。换句话说就是,即使没有用this指针,编译器在编译的时候也会自动加上this的,它是一个隐含形参,对各成员的访问均通过this进行。

2.3this指针的使用

  1. this只能在成员函数中使用。成员函数默认第一个参数为* const this。(友元函数,全局函数不是成员函数)
  2. this指针不能在静态函数中使用。静态函数如同静态变量一样,他不属于具体的哪一个对象,静态函数表示了整个类范围意义上的信息,而this指针却实实在在的对应一个对象,所以this指针不能被静态函数使用。
  3. this指针只有在成员函数中才有定义。创建一个对象后,不能通过对象使用this指针。也无法知道一个对象的this指针的位置(只有在成员函数里才有this指针的位置)。当然,在成员函数里,你是可以知道this指针的位置的(可以&this获得),也可以直接使用的。

2.4this指针问题补充

  1. this指针创建时间
    ​​​  this 指针在成员函数的开始前构造,在成员函数的结束后清除,生命周期和其他函数参数一样。当调用一个类的成员函数时,编译器将类的指针作为函数的this参数传递进去。
  2. this指针存放位置
    ​​​  this指针会因编译器不同而有不同的放置位置。可能是栈,也可能是寄存器,甚至全局变量。
  3. this指针如何传递类中的函数
    ​​​  大多数编译器通过ecx寄存器传递this指针。在call之前,编译器会把对应的对象地址放到eax寄存器中。this是通过函数参数的首参来传递的。
  4. 我们只有获得一个对象后,才能通过对象使用this指针。如果我们知道一个对象this指针的位置,可以直接使用吗?
    ​​​  this指针只有在成员函数中才有定义。因此,你获得一个对象后,也不能通过对象使用this指针。所以,我们无法知道一个对象的this指针的位置(只有在成员函数里才有this指针的位置)。当然,在成员函数里,你是可以知道this指针的位置的(可以通过&this获得),也可以直接使用它。
  5. this 是 const 指针,它的值是不能被修改的,一切企图修改该指针的操作,如赋值、递增、递减等都是不允许的。

参考

https://blog.csdn.net/weixin_43751983/article/details/91147918

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值