首页 >后端开发 >C++ >按值捕获时如何修改 C 0x Lambda 中捕获的值?

按值捕获时如何修改 C 0x Lambda 中捕获的值?

DDD
DDD原创
2024-11-04 13:44:02781浏览

How Can I Modify Captured Values in C  0x Lambdas When Capturing by Value?

按值捕获 Lambda:确保 C 0x 中捕获的非常量值

在 C 0x lambda 表达式中按值捕获时,捕获的值值自动保持恒定。如果您需要修改 lambda 中捕获的值,这可能会成为一个问题。

例如,考虑以下按值捕获 struct foo 的 lambda:

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

int main(int argc, char* argv[]) {
  foo afoo;

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

  return 0;
}</code>

此代码将无法编译,因为 foo 的 operator() 方法被声明为 const。要解决此问题,您可以将operator()方法设置为非const:

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

但是,这并不总是一个理想的解决方案。在某些情况下,您可能希望按值捕获值,但仍确保它不会在 lambda 内被修改。

要实现此目的,您可以使用 mutable 关键字。通过将 lambda 声明为 [=] () 可变 -> bool,您允许 lambda 修改捕获的值。

示例:

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

在此示例中,lambda 现在可以修改捕获的 afoo 对象,甚至尽管它是通过值捕获的。

以上是按值捕获时如何修改 C 0x Lambda 中捕获的值?的详细内容。更多信息请关注PHP中文网其他相关文章!

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