除了允许 const 成员函数修改数据成员之外,“mutable”关键字还有其他用途吗?

2024-03-23

不久前,我遇到了一些代码,用以下标记标记了类的数据成员mutable关键词。据我所知,它只是允许您修改const- 合格会员方法:

class Foo  
{  
private:  
    mutable bool done_;  
public:  
    void doSomething() const { ...; done_ = true; }  
};

这是该关键字的唯一用途,还是还有比表面上看起来更多的用途?从那以后,我在课堂上使用了这种技术,标记了boost::mutex as mutable,允许const出于线程安全原因来锁定它的函数,但是,说实话,这感觉有点像黑客。


它允许区分按位常量和逻辑常量。逻辑常量是指对象不会以通过公共接口可见的方式更改,就像您的锁定示例一样。另一个例子是一个类,它在第一次请求时计算一个值,并缓存结果。

从c++11开始mutable可以用在 lambda 上来表示通过值捕获的内容是可修改的(默认情况下它们是不可修改的):

int x = 0;
auto f1 = [=]() mutable {x = 42;};  // OK
auto f2 = [=]()         {x = 42;};  // Error: a by-value capture cannot be modified in a non-mutable lambda
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

除了允许 const 成员函数修改数据成员之外,“mutable”关键字还有其他用途吗? 的相关文章

随机推荐