解决“错误:变量”无法隐式捕获,因为未指定默认捕获模式”
使用 lambda 并捕获时外部变量,指定捕获模式很重要。在这种情况下,编译器会抱怨变量 flagId 正在 lambda 表达式中使用,但尚未捕获。
将外部参数 flagId 包含在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中文网其他相关文章!