在C++中,mutable关键字用于修饰类的数据成员,表示即使在const成员函数中也可以修改该成员变量。
具体含义:
- 常规规则 :在
const成员函数中,不能修改类的任何成员变量 - mutable例外 :被
mutable修饰的成员变量可以在const成员函数中被修改
常见使用场景:
cpp
class MyClass {
public:
void someMethod() const { // const成员函数
_observerSet = ...; // 这里可以修改,因为是mutable的
_otherVar = ...; // ❌ 错误:不能修改非mutable成员
}
private:
mutable OpenThreads::AtomicPtr _observerSet; // 可以被const函数修改
int _otherVar; // 不能被const函数修改
};
注意事项:
mutable打破了const的语义保证,应谨慎使用- 主要用于实现细节的优化,不应改变对象的可观察状态
- 在多线程环境下使用时要特别注意线程安全