什么是mutable关键字?
mutable
被用于修饰类的成员变量。当一个成员变量被声明为mutable
时,它允许在const
成员函数内部被修改,即使对象本身是常量。
为什么使用mutable?
-
缓存数据: 在对象内部维护一个缓存,但不希望影响对象的常量性质时,可以使用
mutable
来标记缓存变量。 -
记录状态信息: 在
const
成员函数内部记录对象的某些状态信息,而不想破坏对象的常量性。 -
线程安全性: 在
const
成员函数内部修改某些成员变量以确保线程安全。
mutable的示例
class MyCache {
public:
int GetCachedValue() const {
if (!cacheValid) {
// 计算缓存值,并将其存储在cachedValue中
cachedValue = CalculateValue();
cacheValid = true;
}
return cachedValue;
}
private:
mutable bool cacheValid = false; // 声明为mutable,允许在const函数内修改
mutable int cachedValue = 0; // 声明为mutable,允许在const函数内修改
int CalculateValue() const {
// 计算值的复杂逻辑
return 42;
}
};
在上面的示例中,cacheValid
和cachedValue
都被声明为mutable
。即使在GetCachedValue
这个const
成员函数内部,我们也可以修改这两个成员变量。