八叶一刀·无仞剑

万物流转,无中生有,有归于无

导航

C++中的mutable关键字

Posted on 2021-04-15 20:42  闪之剑圣  阅读(538)  评论(0编辑  收藏  举报

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