C++中mutable关键字作用

mutable,顾名思义表示变量是可变的,与const唱对台戏。不结合实际情况根本让人搞不明白它的意义在哪里,下面结合实例说一下。

假设我们要封装一个多线程下安全使用的vector,大概如下

#include <vector>
#include <mutex>

template<class T>
class ConcurrentVecor{
public:
	//省略其他代码
	bool isEmpty() const{
		std::lock_guard<std::mutex> locker(m_mutex);
		return m_vec.isEmpty();
	}
	
private:
	std::vector<T> m_vec;
	std::mutex m_mutex;
}

这个代码是编译不通过的,因为lock_guard的构造函数为:

explicit lock_guard(mutex_type& m);

传入的nonconst引用,所以isEmpty不能在后面加上const。这就挺蛋疼了呀,这个函数对于使用者而言,就是没有修改任何数据,但是后面又不能戴上const。不加当然也没事儿,但是对于对于阅读代码的人而言,没有那么直观了(其实就是强迫症)。

此时,在m_mutex上加一个mutable,问题就迎刃而解。
划重点:mutable只能用于成员变量,被修饰的变量可以在const成员函数中改变状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值