简述什么是C++的mutable ?
参考答案:
在C++中,mutable
是一个关键字,用于修改一个类的const成员变量的值。当一个类的成员函数被声明为const时,它不能修改类的任何非静态成员变量,这是为了保证在调用该函数时,对象的状态不会发生变化。但是,有时候我们可能需要在const成员函数中修改某个成员变量的值,这时就可以使用Mutable
关键字。
一个被Mutable
修饰的成员变量可以在const成员函数中被修改,但在其他非const成员函数中,它仍然可以被修改。这是因为Mutable
只影响const成员函数的行为,不影响其他成员函数的行为。
下面是一个简单的例子来说明Mutable
的用法:
class MyClass {
private:
mutable int mutableVar;
int NonMutableVar;
public:
MyClass() : MutableVar(0), NonMutableVar(0) {}
void SetMutableVar(int value) const {
MutableVar = value; // 可以在const成员函数中修改MutableVar的值
}
void SetNonMutableVar(int value) {
NonMutableVar = value; // 可以在非const成员函数中修改NonMutableVar的值
}
int GetMutableVar() const {
return MutableVar;
}
int GetNonMutableVar() const {
return NonMutableVar;
}
};
int main() {
const MyClass obj;
obj.SetMutableVar(10); // 可以调用const成员函数修改MutableVar的值
// obj.SetNonMutableVar(20); // 编译错误,不能在const对象上调用非const成员函数
return 0;
}
在这个例子中,MyClass
类有两个成员变量MutableVar
和NonMutableVar
,其中MutableVar
被Mutable
修饰。SetMutableVar
是一个const成员函数,用于设置MutableVar
的值,而SetNonMutableVar
是一个非const成员函数,用于设置NonMutableVar
的值。在main
函数中,我们创建了一个const对象obj
,并调用了SetMutableVar
函数来修改MutableVar
的值,这是合法的。但是,如果我们尝试调用SetNonMutableVar
函数来修改NonMutableVar
的值,就会导致编译错误,因为不能在const对象上调用非const成员函数。