可变数据成员
有时(但不频繁)会发生这样一种情况,我们希望能修改类的某个数据成员,即使是在一个const成员函数内。可以通过在变量的声明中加入mutable关键字做到这一点。
一个可变数据成员(mutable data member)永远不会是const,即使它是const对象的成员。因此,一个const成员函数可以改变一个可变成员的值。举个例子,我们将给Screen添加一个名为access_ctr的可变成员,通过它我们可以追踪每个Screen的成员函数被调用了多少次:
class Screen{
public :
void some_member()const;
private :
mutable size_t access_ctr; //即使在一个const对象内也能被修改
//其他成员与之前的版本一致
};
void Screen::some_member() const{
++access_ctr; //保存一个计数值,用于记录成员函数被调用的次数
//该成员需要完成的其他工作
}
尽管some_member是一个const成员函数,它仍然能够改变access_ctr的值。该成员是个可变成员,因此任何成员函数,包括const函数在内都能改变它的值。