在C++中,lambda表达式是一种匿名函数,可以在函数内部定义并使用,而不需要单独声明函数。lambda表达式可以捕获外部作用域的变量,以便在lambda函数体内使用。
在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修改了外部变量的值,会影响外部变量本身。