首頁 > 後端開發 > C++ > 何時以及為何在具有按值捕獲的 C 11 Lambda 中使用'mutable”關鍵字?

何時以及為何在具有按值捕獲的 C 11 Lambda 中使用'mutable”關鍵字?

Susan Sarandon
發布: 2024-11-28 01:07:14
原創
1015 人瀏覽過

When and Why Use the `mutable` Keyword in C  11 Lambdas with Capture-by-Value?

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板