1.常量成员函数不能改变调用它的对象的内容
class A{
private:
int a;
void fun() {}
void fun1() const {
a += 2;
}
};
//error: assignment of member 'A::a' in read-only object
2.常量对象,以及常量对象的引用或指针只能调用常量成员函数
class A{
private:
int a;
void fun() {}
void fun1() const {
fun();
}
};
//error: passing 'const A' as 'this' argument of 'void A::fun()' discards qualifiers [-fpermissive]|
这是为什么呢?
因为我们会为每个成员函数传入一个隐式的this指针,这个指针的类型是A *const(不能改变指向对象的地址)。this指针仍遵循初始化规则,即我们不能将this指针绑定到一个常量对象上去。所以我们不能在一个常量对象上调用普通的成员函数。所以我们有时需要将this指针声明为指向常量的常量指针。c++的做法是将const放在成员函数的参数列表后,例如:
void function() const {}
此时this的类型是const A *const,我们称该函数为常量成员函数。所以常量成员函数不能改变调用它的对象的内容。