深圳住房和建设局网站置换平台,网站认证金额怎么做分录,网站开发 html,金安合肥网站建设专业2006-12-16 05:00 来源#xff1a;BLOG 作者#xff1a;寒星轩 责任编辑#xff1a;方舟yesky 评论(32)推荐#xff1a;经典教程专区mutalbe的中文意思是“可变的#xff0c;易变的”#xff0c;跟constant#xff08;既C中的const#xff09;是反义词。在C中… 2006-12-16 05:00 来源BLOG 作者寒星轩 责任编辑方舟·yesky 评论(32) 推荐经典教程专区 mutalbe的中文意思是“可变的易变的”跟constant既C中的const是反义词。 在C中mutable也是为了突破const的限制而设置的。被mutable修饰的变量将永远处于可变的状态即使在一个const函数中。 我们知道如果类的成员函数不会改变对象的状态那么这个成员函数一般会声明成const的。但是有些时候我们需要在const的函数里面修改一些跟类状态无关的数据成员那么这个数据成员就应该被mutalbe来修饰。 下面是一个小例子 class ClxTest { public: void Output() const; }; void ClxTest::Output() const { cout Output for test! endl; } void OutputTest(const ClxTest lx) { lx.Output(); } 类ClxTest的成员函数Output是用来输出的不会修改类的状态所以被声明为const的。 函数OutputTest也是用来输出的里面调用了对象lx的Output输出方法为了防止在函数中调用其他成员函数修改任何成员变量所以参数也被const修饰。 如果现在我们要增添一个功能计算每个对象的输出次数。如果用来计数的变量是普通的变量的话那么在const成员函数Output里面是不能修改该变量的值的而该变量跟对象的状态无关所以应该为了修改该变量而去掉Output的const属性。这个时候就该我们的mutable出场了——只要用mutalbe来修饰这个变量所有问题就迎刃而解了。 下面是修改过的代码 class ClxTest { public: ClxTest(); ~ClxTest(); void Output() const; int GetOutputTimes() const; private: mutable int m_iTimes; }; ClxTest::ClxTest() { m_iTimes 0; } ClxTest::~ClxTest() {} void ClxTest::Output() const { cout Output for test! endl; m_iTimes; } int ClxTest::GetOutputTimes() const { return m_iTimes; } void OutputTest(const ClxTest lx) { cout lx.GetOutputTimes() endl; lx.Output(); cout lx.GetOutputTimes() endl; } 计数器m_iTimes被mutable修饰那么它就可以突破const的限制在被const修饰的函数里面也能被修改。