首页  >  文章  >  后端开发  >  Lambda 函数可以捕获 C 0x 中的非常量值吗?

Lambda 函数可以捕获 C 0x 中的非常量值吗?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-02 06:57:29686浏览

Can Lambda Functions Capture Non-Const Values in C  0x?

Lambda 捕获和可修改的捕获值

在 C 0x 中,lambda 表达式提供了捕获局部变量的强大方法。但是,默认情况下,通过值捕获的变量被视为 const。在使用需要修改捕获值的库时,这可能会造成限制。

考虑以下场景:

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

int main()
{
  foo afoo;

  // Attempt to capture non-const reference by value
  auto bar = [=]() -> bool { afoo(true); };
}</code>

由于尝试修改捕获的值 afoo,此代码无法编译在非常量成员函数 afoo::operator().

解决方案:使用 Mutable Lambda

按值捕获,同时保留修改捕获变量的能力,可以使用 mutable 关键字。通过将 lambda 声明为可变,它允许修改其内部状态,包括捕获的值。

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

在这个修改后的示例中,允许 lambda 的 operator() 修改捕获的 afoo,从而解决了编译问题错误。请注意,如果没有 mutable 关键字,由于捕获的非 const 值,lambda 将被视为 const。

以上是Lambda 函数可以捕获 C 0x 中的非常量值吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

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