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-最终正确结果
嘿嘿,到此结束!