我们在定义类的成员函数的时候,往往函数块内会返回一个其他的成员,这种方式实际上是隐式地指向调用该函数的对象的成员,即成员函数通过一个名为this的额外的隐式参数来访问调用它的那个对象。
而我们往往会看到成员函数的参数列表后紧跟着一个const关键字,这个const的作用是修改隐式this指针的类型。
默认情况下来说,this的类型是指向类类型的非常量版本的指针,可以表示为 struct_name *const, 尽管this是隐式的,但它仍需要遵循初始化原则,这就意味值默认情况下this指针是不能绑定到一个常量对象上的,这也就意味着我们不能在一个常量对象上调用普通成员函数。
1 | // 简单定义一个类 |
所以在这种情况下,我们应该把this声明为 const struct_name *const 这样就可以解决问题,但又因为this是隐式的,所以我们可以将成员函数的声明改为:
1 | int helper() const {} |
这样就可以将this声明为指向常量对象的版本了。而这种使用const的成员函数也叫做常量成员函数(const member function)。