ホームページ > バックエンド開発 > C++ > 値による C 11 ラムダのキャプチャがデフォルトで変更可能なのはなぜですか?

値による C 11 ラムダのキャプチャがデフォルトで変更可能なのはなぜですか?

DDD
リリース: 2024-12-01 03:57:11
オリジナル
808 人が閲覧しました

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

C 11 の可変性とラムダ値によるキャプチャ

C 11 のラムダ式では、次のいずれかの方法で外部変数をキャプチャできます。参照または値によって。ただし、値でキャプチャする場合は、デフォルトで mutable キーワードが必要です。これは、特に名前付き関数に渡す従来のパラメーターには可変性が必要ないことを考えると、その必要性に関する疑問を引き起こしました。

可変性の背後にある理論

重要な違いは、関数オブジェクトとしてのラムダの性質。これらは、呼び出しのたびに一貫した結果を生成するように設計されています。ラムダ式がキャプチャされた変数を可変として宣言せずに変更できる場合、この原則に違反します。その結果、コンパイラのデフォルトでは、capture-by-value 変数は変更されないままであると想定されます。

Mutable 宣言

mutable キーワードにより、capture- の明示的な変更が可能になります。ラムダ式内の値渡し変数。これは、関数オブジェクトが現在の状態に基づいて異なる動作をすることを意図していることを認識します。たとえば、以下のラムダは実行されるたびにカウンターをインクリメントします。

int n = 0;
[mutable](){ n++; }();
ログイン後にコピー

意味と代替

値によるキャプチャの可変性の要件により、次のことが保証されます。ラムダは決定的な動作を維持します。また、キャプチャされた変数が外部から変更されることを意図していない多くの場合、参照によるキャプチャの必要性も排除されます。ただし、mutable を過度に使用すると、コードの明確さが妨げられ、副作用が発生する可能性があることに注意してください。

以上が値による C 11 ラムダのキャプチャがデフォルトで変更可能なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート