Lambda 捕獲錯誤:捕獲外部變數
使用lambda 函數調用std::remove_if 時,必須指定需要的變數從封閉範圍中捕獲。在此上下文中,提供的程式碼嘗試根據外部變數flagId 過濾m_FinalFlagsVec,但遇到錯誤:
“錯誤C3493:無法隱式捕獲'flagId',因為未指定預設捕獲模式”
解決方案:明確捕獲
要解決此問題,我們必須使用方括號在lambda 表達式中明確聲明捕獲flagId,後跟捕獲模式(透過值、透過引用或透過const 值)。例如,透過引用捕獲 flagId:
<code class="cpp">auto new_end = std::remove_if(m_FinalFlagsVec.begin(), m_FinalFlagsVec.end(), [&flagId](Flag& device) { return device.getId() == flagId; });</code>
此語法明確捕獲 flagId 作為引用,允許 lambda 表達式存取和操作其值。
捕獲模式
下表總結了 C lambda 表達式中可用的不同捕獲模式:
Capture Mode | Syntax | Behavior |
---|---|---|
Capture by value | [flagId] | Creates a copy of flagId inside the lambda |
Capture by reference | [&flagId] | Captures a reference to flagId |
Capture by const value | [flagId] (const-qualified) | Captures a constant copy of flagId |
Capture by mutable value | [flagId] (mutable qualifier) | Captures a value of flagId that can be modified inside the lambda |
Capture by const reference | [&flagId] = std::as_const(flagId) (C 17 ) | Captures a constant reference to flagId |
以上是在 C 中捕獲外部變數時如何處理 Lambda 捕獲錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!