値によるキャプチャのための 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 サイトの他の関連記事を参照してください。