const成员函数和mutable关键字

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, ....到此结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值