ホームページ  >  記事  >  バックエンド開発  >  C++ ラムダ式はどのようにして外部変数をキャプチャするのでしょうか?

C++ ラムダ式はどのようにして外部変数をキャプチャするのでしょうか?

WBOY
WBOYオリジナル
2024-04-17 16:39:02771ブラウズ

C で外部変数のラムダ式をキャプチャするには 3 つの方法があります。 値によるキャプチャ: 変数のコピーを作成します。参照によるキャプチャ: 変数参照を取得します。値と参照による同時キャプチャ: 値または参照による複数の変数のキャプチャを許可します。

C++ lambda 表达式如何捕获外部变量?

C ラムダ式: 外部変数のキャプチャ

ラムダ式は、関数内に匿名関数を定義できる C の強力なツールです。場合によっては、ラムダ式で外部変数にアクセスする必要があります。このチュートリアルでは、外部変数をキャプチャするいくつかの異なる方法について説明します。

方法 1: 値でキャプチャする

[var] 構文を使用すると、変数 var を値でキャプチャできます。これは、ラムダ式が変数のコピーを作成することを意味します。

auto var = 10;
auto lambda = [var] {
  // 这里可以使用 var
  return var;
};

方法 2: 参照によるキャプチャ

[&var] 構文を使用すると、変数 var を参照によってキャプチャできます。これは、ラムダ式が変数への参照を取得することを意味します。

auto var = 10;
auto lambda = [&var] {
  // 这里可以使用 var 并修改它
  var++;
  return var;
};

方法 3: 値と参照によってキャプチャする

複数の変数を値と参照によって同時にキャプチャできます。たとえば、次のラムダ式は、値によって val をキャプチャし、参照によって ref をキャプチャします。

auto func = [](int val, int& ref) {
  // val 是按值捕获的,ref 是按引用捕获的
};

実用的なケース

次の例は、使用方法を示しています。値および参照による外部変数のキャプチャ:

#include <iostream>
#include <vector>

using namespace std;

int main() {
  // 按值捕获
  int num = 10;
  auto lambda1 = [num] { return num++; };
  cout << lambda1() << endl;  // 输出 10

  // 按引用捕获
  vector<int> myVector{1, 2, 3};
  auto lambda2 = [&myVector] { myVector.push_back(4); };
  lambda2();
  for (auto& elem : myVector) {
    cout << elem << " ";  // 输出 1 2 3 4
  }
  cout << endl;

  return 0;
}

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

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