0%

C++中的const成员函数

我们在定义类的成员函数的时候,往往函数块内会返回一个其他的成员,这种方式实际上是隐式地指向调用该函数的对象的成员,即成员函数通过一个名为this的额外的隐式参数来访问调用它的那个对象。

而我们往往会看到成员函数的参数列表后紧跟着一个const关键字,这个const的作用是修改隐式this指针的类型。

默认情况下来说,this的类型是指向类类型的非常量版本的指针,可以表示为 struct_name *const, 尽管this是隐式的,但它仍需要遵循初始化原则,这就意味值默认情况下this指针是不能绑定到一个常量对象上的,这也就意味着我们不能在一个常量对象上调用普通成员函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 简单定义一个类
struct help{
int a;
int b;
help(int aa, int bb) {
a = aa;
b = bb;
}
int helper() {
return a;
}
};

int main(int argc, const char * argv[]) {
const help temp(12, 23); // 声明一个常量类对象
int c = temp.helper(); // 错误,因为help()是一个普通成员函数,所以this是指向一个非常量对象,而temp又是一个常量对象,所以会报错
cout << c << endl;
}

所以在这种情况下,我们应该把this声明为 const struct_name *const 这样就可以解决问题,但又因为this是隐式的,所以我们可以将成员函数的声明改为:

1
int helper() const {}

这样就可以将this声明为指向常量对象的版本了。而这种使用const的成员函数也叫做常量成员函数(const member function)。