一、mutable作用mutable的设计目的是为了允许类成员变量在const成员成函数中被修改二、mutable修饰的成员变量破坏了const成员函数的限制规则const修饰的成员函数规则不允许修改任何非静态成成员变量不允许调用其他非const成员函数但mutable关键字破坏了第一个规则代码class MyClass { private: int age; // 普通变量 mutable int cache; // mutable变量 public: void setAge(int a) const { // age a; // ❌ 编译报错const函数中不能修改普通成员 cache a; // ✅ OKmutable变量可以在const函数中修改 } };三、mutable使用场景1、惰性缓存使用const函数返回对象数据但是这个函数希望第一次读取时计算数据并进行缓存结果后续直接返回缓存值则mutable修饰的成员变量可满足上面的要求代码class DataProcessor { private: std::string raw_data; mutable bool cache_valid; // 缓存是否有效需在const中修改 mutable int cached_result; // 缓存的结果需在const中修改 public: int getResult() const { // 逻辑上是只读函数标记为const if (!cache_valid) { // 执行昂贵计算如遍历大数据... cached_result raw_data.size() * 10; cache_valid true; // ✅ 因为是mutable所以可以在const函数中修改 } return cached_result; } };2、使用mutable修饰的互斥锁对象实现线程安全的const函数将互斥锁Mutex声明为mutable让const函数能安全地加锁代码#include mutex class ThreadSafeCounter { private: mutable std::mutex mtx; // 锁必须是mutable因为const函数中需要上锁 int value 0; public: int get() const { // 获取值逻辑上只读 std::lock_guardstd::mutex lock(mtx); // ✅ 调用 mtx.lock() 改变锁状态 return value; } };