目录
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的时候编译器就不会报错。