首页  >  文章  >  后端开发  >  如何解决带有外部变量的 Lambda 表达式中的“错误:无法隐式捕获变量”?

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

Susan Sarandon
Susan Sarandon原创
2024-10-23 17:42:04123浏览

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中文网其他相关文章!

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