为了账号安全,请及时绑定邮箱和手机立即绑定

除了允许变量被const函数修改之外,'mutable'关键字是否有任何其他用途?

除了允许变量被const函数修改之外,'mutable'关键字是否有任何其他用途?

C++
尚方宝剑之说 2019-07-25 15:13:23
除了允许变量被const函数修改之外,'mutable'关键字是否有任何其他用途前段时间我遇到了一些用mutable关键字标记类的成员变量的代码。据我所知,它只是允许您修改const方法中的变量:class Foo  {  private:       mutable bool done_;  public:       void doSomething() const { ...; done_ = true; }  };这是这个关键字的唯一用途,还是有更多的东西比它的眼睛?我已经在一个类中使用了这个技术,标记为一个boost::mutex可变的允许const函数来锁定它出于线程安全的原因,但是,说实话,它感觉有点像黑客。?
查看完整描述

3 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

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

因为mutable可以在lambda上使用c ++ 11 来表示按值捕获的内容是可修改的(默认情况下不是这样):

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



查看完整回答
反对 回复 2019-07-25
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

您对boost :: mutex的使用正是此关键字的用途。另一个用途是用于内部结果缓存以加快访问速度。

基本上,'mutable'适用于不影响对象外部可见状态的任何类属性。

在您的问题的示例代码中,如果done_的值影响外部状态,则可变性可能不合适,这取决于...中的内容; 部分。


查看完整回答
反对 回复 2019-07-25
  • 3 回答
  • 0 关注
  • 639 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信