首頁 > 後端開發 > C++ > 為什麼預設會按值捕獲的 C 11 Lambda 是可變的?

為什麼預設會按值捕獲的 C 11 Lambda 是可變的?

DDD
發布: 2024-12-01 03:57:11
原創
808 人瀏覽過

Why are C  11 Lambdas Capturing by Value Mutable by Default?

C 11 中的可變性和Lambda 按值捕獲

C 11 中的Lambda 表達式允許捕獲外部變量,可以透過參考或按值。但是,當按值捕獲時,預設需要 mutable 關鍵字。這引發了關於其必要性的問題,特別是考慮到傳遞給命名函數的傳統參數不需要可變性。

可變性背後的基本原理

關鍵區別在於lambda 作為函數物件的本質。它們旨在每次調用時產生一致的結果。如果 lambda 表達式可以更改其捕獲的變數而不將其宣告為可變的,則它將違反此原則。因此,編譯器預設假設按值捕獲變數應保持不變。

可變聲明

可變關鍵字允許明確修改捕獲 - lambda 表達式中的按值變數。它承認函數物件旨在根據其當前狀態表現出不同的行為。例如,下面的lambda 每次執行時都會遞增一個計數器:

int n = 0;
[mutable](){ n++; }();
登入後複製

含義和替代方案

按值捕獲中的可變性要求可確保lambda保持確定性行為。在許多情況下,當捕獲的變數不打算從外部修改時,它還消除了透過引用捕獲的需要。然而,值得注意的是,過度使用 mutable 會妨礙程式碼清晰度並引入潛在的副作用。

以上是為什麼預設會按值捕獲的 C 11 Lambda 是可變的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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