【C++】总结4-this指针

this指针是C++中一个重要的概念,它是每个非静态成员函数的隐含参数,指向调用该函数的对象。this的存在使得成员函数能够访问和区分当前对象的成员,无需程序员显式传递对象地址。在函数内部,this指针是const类型的类指针,并且通常存储在寄存器中,而不是栈上。尽管在某些情况下this指针可以为空,但若函数依赖于this来操作对象,则空this将导致错误。
摘要由CSDN通过智能技术生成

什么是this指针

C++编译器给每个非静态成员函数增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

this指针存在的意义

this指针是一个指向当前对象的指针,用于在非静态成员函数中访问当前对象的成员。

主要意义:

  • 区分对象实例:类的代码段是共享的,每个对象实例只保存自己的成员数据,this指针确保每个成员函数正确的访问属于当前对象实例的成员

  • 隐式传递:this指针是隐式传递给非静态成员函数的一个特殊参数。在调用非静态成员函数时,编译器会自动在底层将调用该函数的对象的地址作为this指针传递给该函数。这样,我们在定义成员函数时无需显式声明this参数,而在调用成员函数时也不需要手动传递对象的地址

  • 成员访问:this指针使得成员函数可以访问当前对象的非静态成员变量和其他非静态成员函数,它扮演着连接成员函数与对象的桥梁,使得成员函数能够操作所属的对象

this指针的特性

  • this指针的类型:类类型*const
  • 只能在成员函数的内部使用
  • this指针本质上其实是一个成员函数的形参,是对象调用成员函数时,将对象地址作为实参传递给this形参
  • this指针是成员函数第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户传递

this指针存在哪里

编译器在生成程序时加入了获取对象首地址的相关代码。并把获取的首地址存放在了寄存器ECX中(VC++编译器是放在ECX中,其它编译器有可能不同)。也就是成员函数的其它参数正常都是存放在栈中。而this指针参数则是存放在寄存器中。类的静态成员函数因为没有this指针这个参数,所以类的静态成员函数也就无法调用类的非静态成员变量。

this指针可以为空吗

可以为空,当我们在调用函数的时候,如果函数内部并不需要使用到this,也就是不需要通过this指向当前对象并对其进行操作时才可以为空(当我们在其中什么都不放或者在里面随便打印一个字符串),如果调用的函数需要指向当前对象,并进行操作,则会发生错误(空指针引用)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值