首頁  >  文章  >  後端開發  >  Lambda 函數可以捕捉 C 0x 中的非常量值嗎?

Lambda 函數可以捕捉 C 0x 中的非常量值嗎?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-02 06:57:29686瀏覽

Can Lambda Functions Capture Non-Const Values in C  0x?

Lambda 捕獲和可修改的捕獲值

在 C 0x 中,lambda 表達式提供了捕獲局部變數的強大方法。但是,預設情況下,透過值捕獲的變數被視為 const。在使用需要修改捕獲值的程式庫時,這可能會造成限制。

考慮以下場景:

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

int main()
{
  foo afoo;

  // Attempt to capture non-const reference by value
  auto bar = [=]() -> bool { afoo(true); };
}</code>

由於嘗試修改捕獲的值afoo,此程式碼無法編譯在非常量成員函數afoo::operator().

解決方案:使用Mutable Lambda

按值捕獲,同時保留修改捕獲變數的能力,可以使用mutable 關鍵字。透過將 lambda 聲明為可變,它允許修改其內部狀態,包括捕獲的值。

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

在這個修改後的範例中,允許 lambda 的 operator() 修改捕獲的 afoo,從而解決了編譯問題錯誤。請注意,如果沒有 mutable 關鍵字,由於捕獲的非 const 值,lambda 將被視為 const。

以上是Lambda 函數可以捕捉 C 0x 中的非常量值嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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