mutable
是C++中的一个关键字,它用来修饰类的成员变量。
当我们将一个成员变量声明为mutable
时,就意味着这个成员变量可以被类的任何方法修改,即使这个方法是const
类型的。这是因为mutable
关键字可以打破const
类型的限制,使得const
类型的方法也可以修改成员变量的值。
需要注意的是,使用mutable
关键字可能会破坏程序的const
安全性。因此,在使用时需要谨慎考虑其适用性,并确保不会导致意外的副作用。
例如,下述代码中,
#include <iostream>using namespace std;class A {
public:void add() const{a += 1;return;}
private:int a;
};int main() {return 0;
}
在类A
的add()
方法中,由于该方法是const
的,即不能修改类的成员变量,而它的实现中,却修改了成员变量a
的值。故编译时报错,
a.cpp: In member function 'void A::add() const':
a.cpp:8:11: error: assignment of member 'A::a' in read-only object8 | a += 1;| ~~^~~~
解决方法为,用mutable
修饰成员变量a
,如下所示,
#include <iostream>using namespace std;class A {
public:void add() const{a += 1;return;}
private:mutable int a;
};int main() {return 0;
}
此时,编译成功。