Maison  >  Article  >  développement back-end  >  Comment une expression lambda C++ capture-t-elle les variables externes ?

Comment une expression lambda C++ capture-t-elle les variables externes ?

WBOY
WBOYoriginal
2024-04-17 16:39:02840parcourir

Il existe trois façons de capturer des expressions lambda de variables externes en C++ : Capture par valeur : créez une copie de la variable. Capture par référence : obtenez une référence de variable. Capture par valeur et référence simultanément : permet de capturer plusieurs variables, soit par valeur, soit par référence.

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

Expression lambda C++ : Capture de variables externes

L'expression lambda est un outil puissant en C++ qui nous permet de définir des fonctions anonymes au sein de fonctions. Parfois, nous devons accéder à des variables externes dans les expressions lambda. Ce didacticiel couvrira différentes manières de capturer des variables externes.

Méthode 1 : Capture par valeur

En utilisant la syntaxe [var], nous pouvons capturer la variable var par valeur. Cela signifie que l'expression lambda créera une copie de la variable. [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 是按引用捕获的
};

Méthode 2 : Capture par référence

En utilisant la syntaxe [&var], nous pouvons capturer la variable var par référence. Cela signifie que l'expression lambda obtiendra une référence à la variable.

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

Méthode 3 : Capture par valeur et référence🎜🎜Nous pouvons capturer plusieurs variables par valeur et référence en même temps. Par exemple, l'expression lambda suivante capture val par valeur et ref par référence : 🎜rrreee🎜Un exemple pratique🎜🎜L'exemple suivant montre comment utiliser la capture externe par valeur et par référence Variable: 🎜rrreee

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn