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中文網其他相關文章!