ラムダ キャプチャと変更可能なキャプチャ値
C 0x では、ラムダ式はローカル変数をキャプチャする強力な手段を提供します。ただし、デフォルトでは、値によってキャプチャされた変数は const として扱われます。これにより、キャプチャされた値の変更が必要なライブラリを操作するときに制限が生じる可能性があります。
次のシナリオを考えてみましょう:
<code class="cpp">struct foo { bool operator() (const bool &a) { return a; } }; int main() { foo afoo; // Attempt to capture non-const reference by value auto bar = [=]() -> bool { afoo(true); }; }</code>
キャプチャされた値 afoo を変更しようとしたため、このコードはコンパイルに失敗します。非 const メンバー関数 afoo::operator() 内。
解決策: Mutable Lambda を使用する
キャプチャされた変数を変更する機能を維持しながら値でキャプチャするには、可変キーワードを使用できます。ラムダを可変として宣言することで、キャプチャされた値を含む内部状態の変更が可能になります。
<code class="cpp">auto bar = [=]() mutable -> bool { afoo(true); };</code>
この変更された例では、ラムダの Operator() はキャプチャされた afoo を変更し、コンパイルを解決することができます。エラー。 mutable キーワードがないと、ラムダはキャプチャされた非 const 値により const とみなされます。
以上がLambda 関数は C 0x の非 Const 値をキャプチャできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。