ホームページ >バックエンド開発 >C++ >C ラムダ式で値によってキャプチャし、キャプチャされた変数を変更するにはどうすればよいですか?

C ラムダ式で値によってキャプチャし、キャプチャされた変数を変更するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-03 11:12:29656ブラウズ

How to Capture by Value and Modify Captured Variables in C   Lambda Expressions?

C 0x でのラムダ キャプチャと定数

C 0x でラムダ式を扱うときによくある疑問が生じます。キャプチャする方法はありますか?

C 言語標準では、変数を値で取得するラムダ式が const 方式で取得されることを指定しています。これは、取得した値をラムダ内で変更できないことを意味します。ただし、特定のシナリオでは、変数を値でキャプチャしながらその値を変更する必要がある場合があります。

たとえば、キャプチャしたい非 const のoperator() メソッドを持つライブラリ ファンクターを考えてみましょう。ラムダを呼び出します。次のコードはコンパイルできません:

<code class="cpp">struct foo
{
  bool operator () ( const bool &amp; a )
  {
    return a;
  }
};

int main()
{
  foo afoo;

  auto bar = [=] () -> bool
    {
      afoo(true);
    };

  return 0;
}</code>

ここでのエラーは、[=] キャプチャ リストで囲まれているため、ラムダ式の演算子() が const として宣言されていることです。これを修正するには、mutable キーワードを使用します。ラムダ キャプチャ リストに mutable を追加することで、値によってキャプチャされた変数であってもラムダがキャプチャされた変数を変更できるようになります。

<code class="cpp">auto bar = [=] () mutable -> bool
    {
      afoo(true);
    };</code>

この変更により、ラムダの Operator() が const ではなくなり、非 const を呼び出すことができるようになります。 afoo オブジェクトの -const 演算子()。

したがって、ラムダ式で値によってキャプチャし、キャプチャされた値が const になるのを防ぐには、キャプチャ リストで mutable キーワードを使用します。これにより、ラムダはコンパイル エラーを引き起こすことなく、キャプチャされた変数を変更できるようになります。

以上がC ラムダ式で値によってキャプチャし、キャプチャされた変数を変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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