mutable中文意思是可变的,易变的,在C++中,我们在类中使用可变数据成员时,需要加mutable关键字,当我们需要改变类中的某个数据成员时,按照我们惯性的思维来说,是很好实现的。我们先给出定义的一个简单的类:
#pragma once
class CSample
{
public:
CSample();
~CSample();
void ChangeNumber() const;
void Change_m2();
private:
mutable size_t m1;
size_t m2;
};
#include "Sample.h"
CSample::CSample()
{
m1 = 2;
m2 = 3;
}
CSample::~CSample()
{
}
void CSample::ChangeNumber() const
{
m1 += 1;
//m2 = m2 + 1;
}
void CSample::Change_m2()
{
m2 += 1;
}
首先我们在一个普通的类的成员函数内修改一个普通的类内数据成员:
void CSample::Change_m2()
{
m2 += 1;
}
这个时候编译器不会报错,可以顺利编译通过。

但是如果需要在一个const成员函数内,修改某个数据成员时,如果没有关键字mutable,操作是非法的,也就是说不被允许的,我们来看:
void CSample::ChangeNumber() const
{
//m1 += 1;
m2 = m2 + 1;
}

如果想要改变这种错误,可以使用关键字mutable:
mutable size_t m1;

此时尽管ChangeNumber是一个const类型的成员函数,但是依旧可以对数据成员m1进行修改。至于什么时候需要使用mutable关键字,需要根据具体的场景来判断,比如再const类型的成员函数中需要有计数操作的时候,可以定义一个mutable类型的计数器。
“清风拂渭水,明月满长安”