ホームページ >バックエンド開発 >C++ >ラムダ式で外部変数を正しくキャプチャするにはどうすればよいですか?

ラムダ式で外部変数を正しくキャプチャするにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-23 18:18:02647ブラウズ

How to Correctly Capture External Variables in Lambda Expressions?

エラー: ラムダ式での外部変数のキャプチャ

ラムダ式を使用する場合、外部変数をキャプチャする方法を指定することが重要です。提供されたコードでは、std::remove_if アルゴリズム内のラムダ式は外部変数 flagId にアクセスする必要があります。ただし、報告されたエラーは、キャプチャ モードが欠落していることを示しています。

解決策:

この問題に対処するには、角括弧 ([ ])。これにより、ラムダ式はスコープ内の外部変数にアクセスできるようになります。主なキャプチャ モードは 3 つあります。

  • [&flagId]: 参照により flagId をキャプチャします。これは、ラムダ内で flagId に加えられた変更は、元の flagId 変数に影響することを意味します。
  • [flagId]: flagId を値でキャプチャします。これにより、ラムダ内で変更できない flagId のローカル コピーが作成されます。
  • [=]: すべての外部変数を値でキャプチャします。これにより、すべての外部変数のローカル コピーが作成されます。

提供されたコードの場合、flagId の更新された値にアクセスする必要があるため、適切なキャプチャ モードは参照によるものです。したがって、修正されたラムダ式は次のようになります。

<code class="cpp">[&flagId](Flag&amp; device) {
    return device.getId() == flagId;
}</code>

キャプチャ モードを指定することで、ラムダ式は外部変数 flagId に正しくアクセスし、目的の操作を実行できます。

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

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