原链接:https://blog.csdn.net/zhaoxd200808501/article/details/78622547
mutable的中文译为 “可变的,易变的”,是constant(即C++中的const)的反义词。
C++中为了突破 const 的限制而采用的,被 mutable 修饰的变量将永远处于可变的状态。
mutable只能作用于类的非静态和非常量数据成员。mutable不能修饰static数据成员,因为static数据成员存储在Data段或BSS段,属于类,不属于类对象,因此类的static数据成员不需要 mutable 的修饰。但常对象和常函数可以对其任意地修改,对于常对象的数据成员一般不可以被修改,若想修改,则需要 mutable 的修饰。
在一个类中,应尽量或者不用 mutable,大量使用 mutable表示程序设计存在缺陷。
例子如下:Test类中有一个输出函数,不会修改类的状态,所以被声明为const的。 如果现在,我们要增添一个功能:统计每个对象调用输出函数Output()的次数。如果用来计数的变量是普通的变量的话,那么在const成员函数Output里面是不能修改该变量的值的;而该变量跟对象的状态无关,所以应该为了修改该变量而去掉Output的const属性。这个时候,就该我们的mutable出场了——只要用mutalbe来修饰这个变量,所有问题就迎刃而解了。计数器m_cnt 被mutable修饰,那么它就可以突破const的限制,在被const修饰的函数里面也能被修改。
#include <iostream>
using namespace std;
class Test
{
private:
mutable int m_cnt;
public:
Test()
{
m_cnt = 0;
}
void Output() const
{
cout << "Output for test!" << endl;
m_cnt++;
}
int getCnt() const
{
return m_cnt;
}
};
int main()
{
Test test;
test.Output();
cout << "cnt:" << test.getCnt() << endl;
return 0;
}
原文:https://www.cnblogs.com/jemmyzhong/p/14584725.html