C++11中推出了一种特殊的关键字:mutable用于修饰类变量。它的作用是标注该变量一定会被修改,因此也就不是const类型。
那么标注这个关键字有什么用呢?C++规定被mutable修饰的变量可以在const函数中被修改,因为const函数一般只能允许调用const类型的变量和函数,这样做相当于在函数中给mutable变量开了特例。
那这么做的用处是什么呢?比如我们在有些情境下,需要在const函数中修改某些变量,而这些修改不会影响对象本身的性质,那此时就可以利用mutable来进行修饰。比如说,我们想记录下某个函数被调用的次数:
class A
{
public:
A() { count = 0; }
void compute()const
{
count++;
std::cout << "compute method process count:" << count << std::endl;
}
mutable int count;
};
int main()
{
A a;
a.compute();
a.compute();
return 0;
}
这个时候在compute函数中修改count数量并不会影响计算的结果,因此用mutable修饰count并修改值是很有必要的。