首頁  >  文章  >  後端開發  >  C++ lambda 表達式如何捕捉外部變數?

C++ lambda 表達式如何捕捉外部變數?

WBOY
WBOY原創
2024-04-17 16:39:02838瀏覽

在 C 中捕捉外部變數的 lambda 表達式有三種方法:按值擷取:建立變數副本。按引用擷取:獲得變數引用。同時按值和引用捕獲:允許捕獲多個變量,按值或按引用。

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

C lambda 表達式:捕獲外部變數

lambda 表達式是 C 中強大的工具,它允許我們在函數中定義匿名函數。有時,我們需要在 lambda 表達式中存取外部變數。本教程將介紹捕獲外部變數的幾種不同方法。

方法 1:按值捕獲

使用 [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 是按引用捕获的
};

實戰案例

以下範例展示如何使用按值和按引用捕獲外部變數:

#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++ lambda 表達式如何捕捉外部變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn