阅读量:0
在C++中,lambda表达式是一种匿名函数,可以在函数内部定义并使用,而不需要单独声明函数。lambda表达式可以捕获外部作用域的变量,以便在lambda函数体内使用。
在lambda表达式中,可以使用以下方式来捕获外部变量:
- 按值捕获:通过值传递方式捕获外部变量,lambda函数内部可以修改外部变量的副本,但不会影响外部变量本身。
- 按引用捕获:通过引用传递方式捕获外部变量,lambda函数内部可以修改外部变量的值,会直接影响外部变量本身。
- 按引用捕获(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修改了外部变量的值,会影响外部变量本身。