C 0x Lambda 捕獲可以在不為常數的情況下進行修改嗎?
C 0x 中的 Lambda 捕獲通常透過引用捕獲變量,這些變量本質上是常數。然而,某些場景需要修改捕獲的變量,這就提出了一個問題:「捕獲的值可以變得非常量嗎?」
考慮一個庫函子foo,帶有一個非常量方法, operator(),需要在lambda 中呼叫。下面的程式碼片段嘗試這樣做,但無法編譯:
<code class="c++">struct foo { bool operator () ( const bool & 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中文網其他相關文章!