mutable只能用于修饰类的非静态数据成员。对于使用使用mutable修饰的成员变量,const成员函数可以调用它,并改变它的值。如果缺少mutable,那么就无法编译通过。
mutable具有欺骗性,使用它可以使const的成员函数悄悄的改变的类的成员函数,而无须使用const_cast来转换this指针。
class X{
public:
void foo() const
{
if (!changed_){
changed_ = true;
}
// do something
}
private:
mutable bool changed_;
};
//--------------------------------------------------
另外一个例子:
class String{
public:
String(char* pstring):pstring_(pstring)
{
}
char& operator[](int index)const
{
...
return pstring_[index];
}
private:
char* pstring_;
};
main中的代码:
const String str("any man of mine!");
char& c=str[0]; //call const-function
c='B'; //modified 'pstring_ ' from outer
这些代码将会通过编译,虽然会出现运行时错误。