首页 > 后端开发 > C++ > 正文

如何解决带有外部变量的 Lambda 表达式中的'错误:无法隐式捕获变量”?

Susan Sarandon
发布: 2024-10-23 17:42:04
原创
122 人浏览过

How to Resolve

解决“错误:变量”无法隐式捕获,因为未指定默认捕获模式”

使用 lambda 并捕获时外部变量,指定捕获模式很重要。在这种情况下,编译器会抱怨变量 flagId 正在 lambda 表达式中使用,但尚未捕获。

将外部参数 flagId 包含在lambda 表达式,您需要指定应该捕获它。这是使用方括号 [] 完成的。

有几种可用的捕获模式:

  • 按值捕获: 按变量值捕获变量,在 lambda 内创建副本。
  • 通过引用捕获: 通过引用捕获变量,允许 lambda 修改原始变量。
  • 通过 const 引用捕获:通过 const 引用捕获变量,允许 lambda 读取原始变量但不能修改它。

对于这个特定场景,如果目的是将设备的 ID 与 flagId 进行比较,您可以通过值捕获 flagId:

<code class="cpp">auto new_end = std::remove_if(m_FinalFlagsVec.begin(), m_FinalFlagsVec.end(),
        [flagId](Flag& device)
    { return device.getId() == flagId; });</code>
登录后复制

或者,如果您需要在 lambda 内修改 flagId,您可以通过引用捕获它:

<code class="cpp">auto new_end = std::remove_if(m_FinalFlagsVec.begin(), m_FinalFlagsVec.end(),
        [&flagId](Flag& device)
    { return device.getId() == flagId; });</code>
登录后复制

通过指定捕获模式,您可以明确通知编译器您打算在 lambda 内使用外部变量。这解决了编译错误并允许代码按预期运行。

以上是如何解决带有外部变量的 Lambda 表达式中的'错误:无法隐式捕获变量”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!