[C++] const和mutable关键字使用方法
const 修饰的变量为常成员变量,表示此变量不能被修改赋值,并且构造函数中只能用初始化列表的方式初始化,其他初始化方式都是错误的
const 修饰的函数为常成员函数,表示此函数中只能读取成员变量,不能修改成员变量
const 修饰的对象为常对象,常对象保护了对象中所有的数据成员不能被任何函数访问和修改,只能使用常成员函数来访问。
如果一个对象被声明为常对象,它只能调用该对象的 const 型成员函数。
常对象定义格式:
// 下面两种方式都可以 const 类名 对象名; 类名 const 对象名;
mutable 是为了突破 const 的显示而设置的,被 mutable 修饰的变量,将永远可变,即使在 const 修饰的函数中。
#include "iostream" using namespace std; class Student { private: const int a; const int b = 34; int c = 78; mutable int d; public: // 只能用初始化列表的方式初始化常量 explicit Student(int a) : a(a) { // 这种方式初始化常量是错误的 //this->b = 56; } void print() const { // 常成员函数中不能修改成员变量 //this->c = 78; // mutable修饰的变量可以在常成员函数中修改 this->d = 90; cout << a << " " << b << " " << c << " " << d << endl; } void print1() { cout << a << " " << b << " " << c << " " << d << endl; } }; int main(void) { Student stu1(12); stu1.print(); stu1.print1(); const Student stu2(11); // 常对象只能调用常成员函数 stu2.print(); // 错误 //stu2.print1(); return 0; }