ホームページ > バックエンド開発 > C++ > C 11 Lambdas で Capture-by-Value で `mutable` キーワードをいつ使用するのか、なぜ使用するのか?

C 11 Lambdas で Capture-by-Value で `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 ラムダの変更可能なキーワード

C 11 ラムダの値によるキャプチャにより、ラムダは次のことをキャプチャできます。コピーを作成してスコープから変数を取得します。ただし、デフォルトでは、このコピーは不変としてマークされます。これは、ラムダがコピーを変更できないことを意味します。

可変性の根拠

このデフォルトの動作の理由は、基本的なものに由来します。関数オブジェクトの原則: 呼び出されるたびに同じ結果が生成される必要があります。ラムダがキャプチャされた変数を変更できる場合、この原則に違反します。

mutable キーワードを使用することにより、プログラマはラムダがキャプチャされた変数を変更できることを明示的に宣言します。この緩和が必要なのは、値によるキャプチャがラムダユーザーがキャプチャされた一時ファイルを変更できるように設計されているためです。この場合、プログラマーの制御下で変更を許可することが合理的です。

指定したコード スニペットを考えてみましょう:

// ...
// [=](){n = 10;}();          // Error: a by-value capture cannot be modified in a non-mutable lambda
ログイン後にコピー

このコードは、ラムダが n を値でキャプチャし、mutable キーワードを使用せずにそれを変更しようとしているため、エラーをスローします。このコードを有効にするには、mutable を使用します。

// ...
[=]() mutable {n = 10;}();
ログイン後にコピー

結論

値によるキャプチャの C 11 ラムダの mutable キーワードは、関数が次のことを思い出させるものとして機能します。通常、オブジェクトは一貫した結果を生成する必要があります。キャプチャされた変数を変更する必要がある場合、mutable キーワードによって明示的に許可されます。この理論的根拠を理解することで、プログラマーはラムダを効果的に使用し、潜在的なエラーを回避できます。

以上がC 11 Lambdas で Capture-by-Value で `mutable` キーワードをいつ使用するのか、なぜ使用するのか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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