mutable允许const成员函数修改特定成员变量,用于维护缓存、计数器等不影响逻辑一致性的状态,如getLength()中更新lengthCache和cacheValid,既保持函数const性又提升性能。

在C++中,mutable关键字用于修饰类的成员变量,它的主要作用是:即使在一个const成员函数中,被mutable修饰的成员变量也可以被修改。这打破了const函数“不能修改对象状态”的限制,但仅限于被声明为mutable的那些成员。
有时候,我们希望一个成员函数是const的——即不改变对象的逻辑状态,但内部可能需要更新某些“不影响外部可见状态”的变量,比如:
这些数据虽然物理上改变了,但不改变对象对外表现的“逻辑常量性”。这时候mutable就派上用场了。
下面是一个典型的使用场景:实现一个字符串长度的缓存。
立即学习“C++免费学习笔记(深入)”;
class MyString {
private:
std::string data;
mutable int lengthCache;
mutable bool cacheValid;
public:
MyString(const std::string& str) : data(str), lengthCache(0), cacheValid(false) {}
// const函数:用户认为它不会改变对象
int getLength() const {
if (!cacheValid) {
lengthCache = data.length(); // 修改mutable成员
cacheValid = true; // 同样可以修改
}
return lengthCache;
}
void setString(const std::string& str) {
data = str;
cacheValid = false; // 重置缓存
}
};
尽管getLength()是const函数,但它仍然能修改lengthCache和cacheValid,因为它们被声明为mutable。
mutable适用于以下情况:
需要注意的是:
基本上就这些。mutable提供了一种“可控地打破const约束”的机制,关键在于你是否真的需要它来维持逻辑上的不变性,同时提升效率或功能。用得好是巧妙设计,用不好就是坑。
以上就是c++++中的mutable关键字有什么用_c++ mutable关键字使用解析的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号