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