c++ this指针

this指针的目的是什么?

引用自(https://zhidao.baidu.com/question/191551305.html

不管是C还是C++,最后编译成机器代码并没有什么本质的区别。

所谓类,虽然在语言这个层面上有了一个概念性的解释(相同属性行为的集合的抽象化),但是实际上在二进制的表示和结构上并没有什么本质的区别,都是一个内存区域保存了一些值。那这样一来,就可能使得程序员跨过一个类的限制(比如应该只能访问自己的成员,但是你想办法访问了其他对象的成员)。

所以C++在设计的时候就隐含了一个this指针,这个指针主要是用于保证你的访问不能跨界和用于区分不同的对象。举个例子,你的任何(成员)函数的声明实际隐含了一个this指针参数,这个参数你不可见,也不可编辑,是编辑器自动添加上去的,为什么要这样?实际上对象在实例化的时候,体积是非常小的,并没有每一个对象都保存函数,同一个类的对象的函数实际上只有一份副本(二进制层面),那如何来区分到底是谁调用了这个函数?就是这个this指针。

this指针实际上是指向了这个对象的内存地址的起始值,所以通过一个偏移量,就知道了对象的各种属性,也就确定了一个绝对的对象。当然在对象的函数操作里我们可以显示的用this->的方式来引用变量,但是你发现即使你不加this指针,它依然知道你引用了谁,其实就是隐含了一个参数this指针。

为了进一步理解,想一下static修饰的函数有什么区别,为什么static函数只能访问static修饰的属性?因为static修饰的函数没有传递这个this指针,所以它不知道你指的是哪一个对象。而实际上,static修饰的符号就和C语言的全局变量和函数没有区别了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值