按值捕獲Lambda:確保C 0x 中捕獲的非常量值
在C 0x lambda 表達式中按值捕獲時,捕獲的值值自動保持恆定。如果您需要修改 lambda 中捕獲的值,這可能會成為一個問題。
例如,考慮以下按值捕獲 struct foo 的 lambda:
<code class="cpp">struct foo { bool operator() (const bool &a) { return a; } }; int main(int argc, char* argv[]) { foo afoo; auto bar = [=] () -> bool { afoo(true); }; return 0; }</code>
此程式碼將無法編譯,因為 foo 的 operator() 方法被宣告為 const。要解決此問題,您可以將operator()方法設為非const:
<code class="cpp">struct foo { bool operator() (bool &a) { return a; } };</code>
但是,這並不總是一個理想的解決方案。在某些情況下,您可能希望按值捕獲值,但仍確保它不會在 lambda 內被修改。
要實現此目的,您可以使用 mutable 關鍵字。將 lambda 聲明為 [=] () 可變 -> bool,您允許 lambda 修改捕獲的值。
範例:
<code class="cpp">auto bar = [=] () mutable -> bool { afoo(true); };</code>
在此範例中,lambda 現在可以修改捕獲的 afoo 對象,甚至儘管它是透過值擷取的。
以上是按值擷取時如何修改 C 0x Lambda 中擷取的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!