mutable
是C++中的一个关键字,它用于修饰类的成员变量。当一个成员变量被声明为 mutable
时,它将允许在常量成员函数中修改这个成员变量的值,即使这个成员函数被声明为 const
。
常量成员函数是类的成员函数,它们承诺不会修改类的成员变量,因此在常量成员函数中,通常是不允许修改任何非 mutable
的成员变量的。但是,有些情况下,您可能希望在常量成员函数中修改某些状态,例如在缓存中保存某些计算结果,而不想破坏类的 const
承诺。这时就可以使用 mutable
修饰那些需要在常量成员函数中修改的成员变量。
下面是一个示例,演示了 mutable
的用法:
class MyClass {
private:
//int data;
mutable int cachedValue; // 使用 mutable 修饰的成员变量
public:
MyClass(int value) : cachedValue(value) {}
int getValue() const { // 常量成员函数
// 在常量成员函数中修改 mutable 成员变量
cachedValue++; // 合法,因为 cachedValue 是 mutable
return cachedValue;
}
};
int main() {
const MyClass obj(42);
cout << obj.getValue() << endl; // 调用常量成员函数
return 0;
}
在上述示例中,cachedValue
被声明为 mutable
,因此它可以在 getValue
常量成员函数中被修改,即使 getValue
被标记为 const
。这种情况下,cachedValue
的值会在每次调用 getValue
时增加。