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并修改值是很有必要的。