首頁 >後端開發 >C++ >如何正確捕捉Lambda表達式中的外部變數?

如何正確捕捉Lambda表達式中的外部變數?

DDD
DDD原創
2024-10-23 18:18:02644瀏覽

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