首页 >后端开发 >C++ >如何正确捕获Lambda表达式中的外部变量?

如何正确捕获Lambda表达式中的外部变量?

DDD
DDD原创
2024-10-23 18:18:02634浏览

How to Correctly Capture External Variables in Lambda Expressions?

错误:在 Lambda 表达式中捕获外部变量

使用 lambda 表达式时,指定如何捕获外部变量至关重要。在提供的代码中,std::remove_if 算法中的 lambda 表达式需要访问外部变量 flagId。但是,报告的错误表明缺少捕获模式。

解决方案:

要解决此问题,必须使用方括号 ([ ])。这允许 lambda 表达式访问其范围内的外部变量。主要有三种捕获模式:

  • [&flagId]: 通过引用捕获 flagId。这意味着对 lambda 内的 flagId 进行的任何修改都会影响原始 flagId 变量。
  • [flagId]: 按值捕获 flagId。这将创建 flagId 的本地副本,该副本无法在 lambda 内部修改。
  • [=]: 按值捕获所有外部变量。这将创建所有外部变量的本地副本。

对于提供的代码,适当的捕获模式是通过引用,因为它需要访问 flagId 的更新值。因此,修正后的 lambda 表达式为:

<code class="cpp">[&flagId](Flag&amp; device) {
    return device.getId() == flagId;
}</code>

通过指定捕获模式,lambda 表达式可以正确访问外部变量 flagId 并执行所需的操作。

以上是如何正确捕获Lambda表达式中的外部变量?的详细内容。更多信息请关注PHP中文网其他相关文章!

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