目录
1、const修饰成员函数
2、const修饰对象【常对象】
1、const修饰成员函数
用const修饰的成员函数时,const修饰this指针指向的内存区域,成员函数体内不可以修改本类中任何普通成员变量,当成员变量类型符前用mutable修饰时除外。
void myfun(void) const //const 修饰的是成员函数
{
//函数内部不能修改 普通成员变量 mutable除外
}
当函数使用const修饰时,函数不能操作普通成员变量
示例:
class Data {
private:
int data;
public:
Data() {
cout << "无参构造" << endl;
}
Data(int data) {
this->data = data;
cout << "有参构造" << endl;
}
Data(const Data &ob) {
this->data = data;
cout << "拷贝构造" << endl;
}
~Data() {
cout << "析构函数" << endl;
}
public:
void getData(void) const{
//this->data = 1000; err const修饰函数 函数不能操作普通成员
cout << data << endl;
}
};
void Init() {
Data ob(10);
ob.getData();
}
int main() {
Init();
return 0;
}
运行结果:

如果这时候非要在const修饰的函数内部修改普通成员变量的值,这时候可以使用mutable修饰

运行结果:

2、const修饰对象【常对象】
常对象只能调用const修饰的成员函数,常对象可以访问const或者非const数据成员,但不能修改,除非成员用mutable修饰

此时发现,当实例化对象前加上const修饰变成常对象后,这时候调用函数修改data的值,这时候就会报错,因为常对象可以访问const或者非const数据成员,但不能修改
此时当我们把赋值的语句屏蔽后,此时发现还是报错,这是因为大家可以看见这个代码被屏蔽,但是编译器不知道,为了确保安全性,这样做是不行的,必须加上const,告诉编译器这个函数为常函数。

当加上const的时候编译器就不会报错。