深入理解C++ lambda捕获机制

avatar
作者
猴君
阅读量:0

在C++中,lambda表达式是一种匿名函数,可以在函数内部定义并使用,而不需要单独声明函数。lambda表达式可以捕获外部作用域的变量,以便在lambda函数体内使用。

在lambda表达式中,可以使用以下方式来捕获外部变量:

  1. 按值捕获:通过值传递方式捕获外部变量,lambda函数内部可以修改外部变量的副本,但不会影响外部变量本身。
  2. 按引用捕获:通过引用传递方式捕获外部变量,lambda函数内部可以修改外部变量的值,会直接影响外部变量本身。
  3. 按引用捕获(mutable):通过引用传递方式捕获外部变量,但在lambda函数内部可以修改外部变量的值,不会影响外部变量本身。

示例代码:

#include <iostream>  int main() {     int x = 10;     int y = 20;      // 按值捕获     auto lambda1 = [x, y]() {         std::cout << "x: " << x << ", y: " << y << std::endl;     };      // 按引用捕获     auto lambda2 = [&x, &y]() {         x = 100;         y = 200;         std::cout << "x: " << x << ", y: " << y << std::endl;     };      // 按引用捕获(mutable)     auto lambda3 = [&x, &y]() mutable {         x = 100;         y = 200;         std::cout << "x: " << x << ", y: " << y << std::endl;     };      lambda1();     lambda2();     lambda3();      std::cout << "x: " << x << ", y: " << y << std::endl;      return 0; } 

在上面的示例代码中,我们定义了三个lambda表达式,分别按值捕获、按引用捕获和按引用捕获(mutable)外部变量x和y。通过调用这些lambda表达式,我们可以看到它们对外部变量的影响不同。lambda1只读取外部变量的值,不会影响外部变量本身;lambda2和lambda3修改了外部变量的值,会影响外部变量本身。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!