const和mutable的使用

最后更新于:2022-04-02 02:06:49

[TOC] ## const修饰变量 一般用const完全替代C语言的define,且功能更多。用const修饰变量,使之成为常量(或常数)
main.cpp ``` #include #include using namespace std; typedef const double CONSTANT; CONSTANT PI = 3.141592; struct Person { const string name; int age; }; int main() { cout << PI << endl; // 345 Person p = {"cpj", 123}; // 常量无法修改 // p.name="new_cpj"; p.age = 345; cout << p.age << endl; // 345 return 0; } ```

## const修饰类的成员函数 在函数后定义 const,使该函数不能修改成员变量,但可修改非成员变量
main.cpp ``` #include using namespace std; class A { int x; public: void set(int a) { x = a; } // 在函数后定义 const,使该函数不能修改成员变量 void const_set(int a) const { x = a; } }; int main() { A a; a.set(123); // 编译错误 // a.const_set(132); return 0; } ```

## mutable与const为敌 用mutable修饰成员变量,可以使该成员变量即使在const成员函数中也能被修改。
main.cpp ``` #include using namespace std; class A { mutable int x; public: void set(int a) { x = a; } void const_set(int a) const { x = a; } }; int main() { A a; a.set(123); // 可正常赋值 a.const_set(132); return 0; } ```

';