>  기사  >  백엔드 개발  >  C++ 람다 표현식은 외부 변수를 어떻게 캡처합니까?

C++ 람다 표현식은 외부 변수를 어떻게 캡처합니까?

WBOY
WBOY원래의
2024-04-17 16:39:02769검색

C++에서 외부 변수의 람다 식을 캡처하는 방법에는 세 가지가 있습니다. 값으로 캡처: 변수의 복사본을 만듭니다. 참조로 캡처: 변수 참조를 가져옵니다. 값 및 참조로 동시에 캡처: 값 또는 참조로 여러 변수를 캡처할 수 있습니다.

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

C++ 람다 식: 외부 변수 캡처

람다 식은 함수 내에 익명 함수를 정의할 수 있는 C++의 강력한 도구입니다. 때로는 람다 식에서 외부 변수에 액세스해야 하는 경우도 있습니다. 이 튜토리얼에서는 외부 변수를 캡처하는 몇 가지 다른 방법을 다룹니다.

방법 1: 값으로 캡처

[var] 구문을 사용하면 변수 var를 값으로 캡처할 수 있습니다. 이는 람다 식이 변수의 복사본을 생성한다는 의미입니다. [var] 语法,我们可以按值捕获变量 var。这意味着 lambda 表达式将创建该变量的副本。

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

方法 2:按引用捕获

使用 [&var] 语法,我们可以按引用捕获变量 var。这意味着 lambda 表达式将获得对变量的引用。

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

方法 3:按值和引用捕获

我们可以按值和引用同时捕获多个变量。例如,以下 lambda 表达式按值捕获 val,按引用捕获 ref

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

방법 2: 참조로 캡처

[&var] 구문을 사용하면 참조로 변수 var를 캡처할 수 있습니다. 이는 람다 표현식이 변수에 대한 참조를 얻음을 의미합니다.

#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;
}

방법 3: 값과 참조로 캡처🎜🎜값과 참조로 여러 변수를 동시에 캡처할 수 있습니다. 예를 들어 다음 람다 식은 값으로 val을 캡처하고 참조로 ref를 캡처합니다. 🎜rrreee🎜실제 예🎜🎜다음 예에서는 값으로 외부 캡처를 사용하고 참조로 ref를 캡처합니다. 참조 변수: 🎜rrreee

위 내용은 C++ 람다 표현식은 외부 변수를 어떻게 캡처합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.