C 11 Lambda 中用於按值捕獲的可變關鍵字
C 11 lambda 中的按值捕獲允許lambda 捕獲通過複製將變數從其範圍中刪除。但是,預設情況下,此副本被標記為不可變,這表示 lambda 無法修改它。
可變性的基本原理
這種預設行為的原因源自於基本原理函數物件的原則:每次呼叫它們時都應該產生相同的結果。如果 lambda 可以修改捕獲的變量,就會違反此原則。
透過使用 mutable 關鍵字,程式設計師明確聲明 lambda 可以修改捕獲的變數。這種放鬆是必要的,因為按值捕獲的目的是允許 lambda 用戶更改捕獲的臨時值。在這種情況下,允許在程式設計師的控制下進行修改是有意義的。
範例
考慮您提供的程式碼片段:
// ... // [=](){n = 10;}(); // Error: a by-value capture cannot be modified in a non-mutable lambda
此程式碼將引發錯誤,因為lambda 正在按值擷取n 並嘗試在不使用mutable 關鍵字的情況下修改它。要使此程式碼有效,請使用mutable:
// ... [=]() mutable {n = 10;}();
結論
C 11 lambda 中用於按值捕獲的可變關鍵字提醒您,函數物件通常應該產生一致的結果。當需要修改捕獲的變數時,mutable 關鍵字明確允許它。透過理解這個基本原理,程式設計師可以有效地使用 lambda 並避免潛在的錯誤。
以上是何時以及為何在具有按值捕獲的 C 11 Lambda 中使用'mutable”關鍵字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!