C++ mutable 声明一个private变量详解?
时间: 2024-11-25 22:13:41 浏览: 14
在C++中,`mutable`关键字用于声明那些即使在一个`const`对象上也可以被修改的成员变量。这些变量被称为`mutable`,因为它们的行为违反了通常对于`const`对象的期望——即对象的值不应该改变。
当我们在`const`对象上调用一个`mutable`成员函数时,虽然该对象本身是不可修改的,但允许`mutable`成员变量在其内部被更新。这在一些特殊情况下是有必要的,比如在计算过程中需要临时修改对象的状态,但后续不会影响到整个对象的`constness`。
下面是一个简单的示例来展示`mutable`的用法:
```cpp
class ConstClass {
public:
explicit ConstClass(int value) : m_value(value) {}
// 这里的funcB是非mutual的,不允许在const对象上调用
void funcB() const {
// 这会抛出错误,因为试图修改const对象的值
// m_value++;
}
// 这里是mutable成员,可以被const对象调用并修改其值
mutable int m_value;
};
int main() {
// 创建一个const对象,不能直接修改m_value
ConstClass constObj(10);
// 调用非mutable成员funcB会报错,不能在const对象上调用
// constObj.funcB();
// 但是,mutable成员可以在const对象上调用,值可以改变
constObj.m_value++; // 此处不会报错,输出:11
return 0;
}
```
在这个例子中,`ConstClass`有一个`mutable`成员`m_value`,所以在`constObj`上调用`m_value++`是允许的,尽管`ConstClass`本身是`const`的。
阅读全文