mutable的作用
在类的常型(const)成员函数中,一般是不让改变类中数据成员的。如果想在常型成员函数中改变类的数据成员,在传统C++中,为达到此目,可采用一种奇怪的方式——先将this指针强制转换成一个本类的指针,然后就可以利用该指针来对类的数据成员进行任意的修改。但是,这种修改是隐藏在成员函数内部的,在类定义(头文件)中根本看不出来,而且它也破坏了设置常型成员函数的本意。
标准C++中新增加了一个关键字mutable(易变/可变/不定/无常的),用在类的数据成员前,明确表示该成员变量可以在const常量型成员函数中被修改。例如:
class A {
int i;
mutable int j;
public:
void f ( ) const;
};
void A::f ( ) const {
i++; // 错误——常型成员函数不允许改变数据成员的值
((A*)this)->i++; // 可以——已经过时,不被提倡
j++; // 正确——mutable型成员变量
}