C 0x 中的Lambda 捕獲和常數
在C 0x 中使用lambda 表達式時出現一個常見問題:
在C 0x 中使用lambda 表達式有一個常見問題:有辦法捕獲按值擷取變量,同時防止擷取的值變為const? C 語言標準指定按值擷取變數的 lambda 表達式以 const 方式執行此操作。這意味著捕獲的值無法在 lambda 內部修改。但是,在某些情況下,可能需要按值捕獲變量,但仍會修改其值。 例如,考慮一個具有非常量operator()方法的函式庫函子,我們想要捕捉並呼叫 lambda。以下程式碼將無法編譯:<code class="cpp">struct foo { bool operator () ( const bool & a ) { return a; } }; int main() { foo afoo; auto bar = [=] () -> bool { afoo(true); }; return 0; }</code>這裡的錯誤是由於周圍的 [=] 捕獲列表,lambda 表達式的 operator() 被聲明為 const。為了解決這個問題,我們可以使用 mutable 關鍵字。透過將mutable 加入lambda 捕獲列表,我們允許lambda 修改捕獲的變量,甚至是透過值捕獲的變量:
<code class="cpp">auto bar = [=] () mutable -> bool { afoo(true); };</code>此修改使lambda 的operator() 不是const,允許我們調用非const -afoo 物件的const operator()。 因此,要在 lambda 表達式中按值捕獲並防止捕獲的值成為 const,請在捕獲列表中使用 mutable 關鍵字。這允許 lambda 修改捕獲的變數而不會導致編譯錯誤。
以上是如何在 C Lambda 表達式中按值捕獲並修改捕獲的變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!