首頁  >  文章  >  後端開發  >  C 0x Lambda 捕獲可以在不使用 const 的情況下進行修改嗎?

C 0x Lambda 捕獲可以在不使用 const 的情況下進行修改嗎?

DDD
DDD原創
2024-10-30 13:28:01779瀏覽

Can C  0x Lambda Captures Be Modified Without Being Const?

C 0x Lambda 捕獲可以在不為常數的情況下進行修改嗎?

C 0x 中的 Lambda 捕獲通常透過引用捕獲變量,這些變量本質上是常數。然而,某些場景需要修改捕獲的變量,這就提出了一個問題:「捕獲的值可以變得非常量嗎?」

考慮一個庫函子foo,帶有一個非常量方法, operator(),需要在lambda 中呼叫。下面的程式碼片段嘗試這樣做,但無法編譯:

<code class="c++">struct foo
{
  bool operator () ( const bool &amp; a )
  {
    return a;
  }
};

auto bar = [=] () -> bool
{
  afoo(true);
};</code>

出現編譯錯誤是因為 lambda 的 operator() 由於捕獲的值是常數而被隱式標記為 const。為了解決這個問題,C 0x 提供了 mutable 關鍵字。

<code class="c++">auto bar = [=] () mutable -> bool
{
  afoo(true);
};</code>

透過加入 mutable,lambda 的 operator() 不再是 const,允許在 lambda 內修改捕獲的變數。這使得可以根據 lambda 內的需要修改函式庫函子或其他非常量捕獲的值。

以上是C 0x Lambda 捕獲可以在不使用 const 的情況下進行修改嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn