Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah ungkapan lambda C++ menangkap pembolehubah luaran?

Bagaimanakah ungkapan lambda C++ menangkap pembolehubah luaran?

WBOY
WBOYasal
2024-04-17 16:39:02771semak imbas

Terdapat tiga cara untuk menangkap ungkapan lambda pembolehubah luaran dalam C++: Tangkap mengikut nilai: Buat salinan pembolehubah. Tangkap melalui rujukan: Dapatkan rujukan berubah-ubah. Tangkap mengikut nilai dan rujukan serentak: Membenarkan tangkapan berbilang pembolehubah, sama ada mengikut nilai atau rujukan.

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

C++ ungkapan lambda: Menangkap pembolehubah luaran

ekspresi lambda ialah alat berkuasa dalam C++ yang membolehkan kami mentakrifkan fungsi tanpa nama dalam fungsi. Kadangkala, kita perlu mengakses pembolehubah luaran dalam ungkapan lambda. Tutorial ini akan merangkumi beberapa cara berbeza untuk menangkap pembolehubah luaran.

Kaedah 1: Tangkap mengikut nilai

Menggunakan sintaks [var], kita boleh menangkap pembolehubah var mengikut nilai. Ini bermakna ungkapan lambda akan mencipta salinan pembolehubah. [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 是按引用捕获的
};

Kaedah 2: Tangkap dengan rujukan

Menggunakan sintaks [&var], kita boleh menangkap pembolehubah var melalui rujukan. Ini bermakna ungkapan lambda akan mendapat rujukan kepada pembolehubah.

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

Kaedah 3: Tangkap mengikut nilai dan rujukan🎜🎜Kita boleh menangkap berbilang pembolehubah mengikut nilai dan rujukan pada masa yang sama. Sebagai contoh, ungkapan lambda berikut menangkap val mengikut nilai dan ref melalui rujukan: 🎜rrreee🎜Contoh praktikal🎜🎜Contoh berikut menunjukkan cara menggunakan tangkapan luaran mengikut nilai dan dengan rujukan Pembolehubah: 🎜rrreee

Atas ialah kandungan terperinci Bagaimanakah ungkapan lambda C++ menangkap pembolehubah luaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn