<b>深化理解C++中的mutable关键字</b>[VC/C++编程]
本文“<b>深化理解C++中的mutable关键字</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
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修饰的函数里面也能被改正.
以上是“<b>深化理解C++中的mutable关键字</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |