Lambda Capture by Value Always Constant in C 0x?
この問題は、参照によって値を取得しようとするが、内部でその内容を変更しようとすると発生します。ラムダ式。コンパイラはデフォルトでキャプチャされた値を定数として扱い、変更されないことを保証します。ただし、一部のシナリオでは、キャプチャされた値への非 const アクセスが必要な場合があります。
値によるキャプチャについて:
C 0x では、ラムダ関数は値または参照によって変数をキャプチャできます。値でキャプチャする場合、変数のコピーがラムダのスコープ内に作成され、ラムダ内での変更が可能になります。ただし、デフォルトでは、キャプチャされたコピーは定数として扱われ、変更が防止されます。
救済のための可変キーワード:
この制限を克服するには、可変キーワードを使用できます。 mutable をラムダのパラメータ リストの先頭に追加することで、取得した値をラムダのスコープ内で変更可能として明示的に宣言します。これにより、キャプチャされた値への非 const アクセスが可能になり、提供されたコード スニペットで説明されている問題が解決されます。
例:
参照によって値をキャプチャし、非 const メソッドを呼び出す次のコードについて考えてみましょう。メソッド:
struct foo
{
bool 演算子 () ( const bool & a )
{
return a;
}
};
int main()
{
foo afoo;
auto bar = [=] () -> bool
{ afoo(true); };
return 0;
}
このコードでは、 foo::operator() を const にすることでコンパイルの問題が解決されます。ただし、ラムダ式内で直接 mutable を使用すると、柔軟性が高まり、元の宣言を変更せずにキャプチャされた値への非 const アクセスが可能になります
以上がC 0x では値による Lambda キャプチャは常に一定ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。