首页 >后端开发 >C++ >C 0x Lambda 捕获可以在不使用 const 的情况下进行修改吗?

C 0x Lambda 捕获可以在不使用 const 的情况下进行修改吗?

DDD
DDD原创
2024-10-30 13:28:01859浏览

Can C  0x Lambda Captures Be Modified Without Being Const?

C 0x Lambda 捕获可以在不为常量的情况下进行修改吗?

C 0x 中的 Lambda 捕获通常通过引用捕获变量,这些变量本质上是常量。然而,某些场景需要修改捕获的变量,这就提出了一个问题:“捕获的值可以变得非常量吗?”

考虑一个库函子 foo,带有一个非常量方法,operator(),需要在 lambda 中调用。下面的代码片段尝试这样做,但无法编译:

<code class="c++">struct foo
{
  bool operator () ( const bool &amp; a )
  {
    return a;
  }
};

auto bar = [=] () -> bool
{
  afoo(true);
};</code>

出现编译错误是因为 lambda 的 operator() 由于捕获的值是常量而被隐式标记为 const。为了解决这个问题,C 0x 提供了 mutable 关键字。

<code class="c++">auto bar = [=] () mutable -> bool
{
  afoo(true);
};</code>

通过添加 mutable,lambda 的 operator() 不再是 const,允许在 lambda 内修改捕获的变量。这使得可以根据 lambda 内的需要修改库函子或其他非常量捕获的值。

以上是C 0x Lambda 捕获可以在不使用 const 的情况下进行修改吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn