c++类成员函数有 const成员函数, 为了防止函数对成员变量进行修改, 比如
class CTest
{
private:
int m_i;
public:
CTest():m_i(0){}
inline void showData()const{ cout << m_i <<endl;}
};
试图在showData里面修改m_i成员变量是非法的, 这个好理解
但有时候, 我们需要在const成员函数里面修改某些特殊的成员变量, 比如
class CTest
{
private:
int m_i;
bool m_flag;
public:
CTest():m_i(0), m_flag(false){}
inline void showData()const
{
if(m_flag)
cout << m_i <<endl;
m_flag = !m_flag; //编译错误
}
};
我们想没调用一次showData就改变一下m_flag的状态, 而m_i是不允许在showData成员变量里面修改的, 我们这样写是理想的, 但showData是const成员函数, m_flag是该类的成员变量, 我们如何限制在const成员函数里面能够修改m_flag变量, 但不能修改m_i变量呢? 把m_i设为const变量是可以的, 但不切实际, 因为我们可能在其它的地方需要修改它
这样, 就要用到mutable关键字了, 它表示用它修饰的成员变量是可能会被改变的, 这样写法如下:
class CTest
{
private:
int m_i;
mutable bool m_flag; //加上mutable关键字修饰
public:
CTest():m_i(0), m_flag(false){}
inline void showData()const
{
if(m_flag)
cout << m_i <<endl;
m_flag = !m_flag; //编译就没问题了
}
};
ok, ....到此结束