mutable主要用于解决常量成员函数无法修改对象状态的限制.
在常量成员函数中, 允许修改关键字 mutable修饰的变量.

#include <iostream>

class MyClass {
public:
    MyClass(int value) : m_value(value) {}

    void setValue(int value) const {
        // 在常量成员函数中修改成员变量
        m_value = value;  // 使用mutable修饰m_value可以直接修改

        std::cout << "Modified value: " << m_value << std::endl;
    }

    int getValue() const {
        return m_value;
    }

private:
    mutable int m_value;
};

int main() {
    MyClass obj(10);
    
    std::cout << "Initial value: " << obj.getValue() << std::endl;

    obj.setValue(20);

    std::cout << "New value: " << obj.getValue() << std::endl;

    return 0;
}
注意: mutable只能用于非静态成员变量, 对于静态成员变量无效.
而常量成员函数通常设计为不修改对象的状态, 使用mutable打破了这种约定, 使用时要慎重.

Totn
10 声望5 粉丝

幼稚也没关系,去实践,去经历,去思考!