基本语法
[capture](parameters) -> return_type {
// function body
};
Capture List :[capture]
用于指定哪些外部变量可以被lambda表达式捕获,并且捕获方式是通过值捕获还是引用捕获。
[&]
表示通过引用捕获所有外部变量。[=]
表示通过值捕获所有外部变量。- 可以指定具体变量,比如
[x, &y]
表示x
通过值捕获,y
通过引用捕获。
Parameter List :(parameters)
用于指定lambda表达式的参数,就像普通函数的参数列表一样。
Return Type :-> return_type
(可选)
用于指定lambda表达式的返回类型。如果可以通过返回值自动推断类型,则可以省略。
Function Body :{ ... };
包含lambda表达式的实际代码。
用法示例:
基本用法:
auto add = [](int a, int b) -> int {
return a + b;
};
cout << add(2, 3) << endl; // 输出 5
捕获外部变量:
int x = 10, y = 20;
auto lambda = [x, &y]() {
cout << x << " " << y << endl;
y = 30; // 可以修改 y 的值
// x 只是通过值捕获,无法修改 x
};
lambda();
cout << y << endl; // 输出 30
递归 Lambda 表达式:
C++11 及以后的版本支持用lambda表达式实现递归。为了实现递归调用,需要通过参数将自身传递给lambda表达式。
auto fac = [&](auto &&self, int n) -> int {
if (n <= 1) return 1;
return n * self(self, n - 1);
};
cout << fac(fac, 5) << endl; // 输出 120