ホームページ >バックエンド開発 >C++ >C 0x では値による Lambda キャプチャは常に一定ですか?

C 0x では値による Lambda キャプチャは常に一定ですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-30 19:42:30269ブラウズ

Is Lambda Capture by Value Always Constant in C  0x?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。