C++类关键字this解析

C++中的this关键字的作用:当类对象调用成员函数时,编译器会将类对象的地址赋值给隐含的this形参,在成员函数中对类成员的访问都将通过this指针来进行访问。

C++中This关键字的本质:指向类类型的常量指针,假设类名为student,则this指针的类型为student* const。

这样一来,让我们看看如何来理解const成员函数,在这之前,先来看一看普通成员函数的调用。

                                                                图1-普通成员函数调用

                                                                图2-普通函数调用解析

那么const成员函数的意义是什么呢?试想一下,如果将图1中exa1定义为const变量,那么图一中的程序还能通过编译吗?

答案是:显然不能,因为我们已经说过this的本质是常量指针,对于this,student* const = const

student很明显是一个语法错误,this并不是一个指向常量的指针。

所以const成员函数的意义就是将默认的student* const  this 变为 const student* const this。以便能够让const类对象调用。

请看下图:

                                                  图3-const类对象无法调用普通成员函数 

                                                            图4-修改为const成员函数 

咦?为什么会报错呢?

哈哈!我是不是说了呀,此时的this的类型是const student* const 。那这是不是代表着不能通过this来修改类对象的成员了呢?

答案当然是的,此时在const成员函数中无法修改类对象的成员(成员函数和成员变量),这与const 类对象对象的特性相符。

但是!要注意一点,类中的static成员属于类,而不属于类对象,所以当编译器发现通过this指向的是static成员时,它就知道这个不是属于const类对象的内容,可以修改,也即可以通过编译。

如下图:

                                                                图5-最终正确结果

嘿嘿,到此结束! 

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值