基本结构讲解
[捕获列表](参数列表) -> 返回类型 {
// 函数体
}
-
捕获列表 (
[ ]
):- 用于指定外部变量的捕获方式。可以:
- 通过值捕获:
[x]
- 通过引用捕获:
[&x]
- 捕获所有变量通过值:
[=]
- 捕获所有变量通过引用:
[&]
- 自由组合,例如:
[x, &y]
- 通过值捕获:
- 用于指定外部变量的捕获方式。可以:
-
参数列表 (
( )
):- 定义参数的列表,与普通函数参数定义相同。可以包含类型和参数名称,或者直接省略类型(使用
auto
)。 - 例如:
(int a, int b)
或(auto x)
。
- 定义参数的列表,与普通函数参数定义相同。可以包含类型和参数名称,或者直接省略类型(使用
-
返回类型 (
->
):- 可选部分。如果 lambda 表达式返回类型可以由编译器推导,则可以省略。
- 如果需要指定返回类型,可以像普通函数一样说明。例如:
-> int
。
-
函数体 (
{ }
):- 实际的函数实现,包含要执行的代码。
以下是几个简单的 lambda 表达式示例:
-
无参数的 lambda 表达式:
auto hello = []() { std::cout << "Hello, World!" << std::endl; }; hello(); // 调用
-
有参数的 lambda 表达式:
auto add = [](int a, int b) { return a + b; }; std::cout << add(3, 5) << std::endl; // 输出 8
-
带捕获的 lambda 表达式:
int x = 10; auto lambda = [x](inty) { return x + y; // 捕获 x }; std::cout << lambda(5) << std::endl; // 输出 15
-
通过引用捕获:
int a = 3; auto increment = [&a]() { a++; }; increment(); std::cout << a << std::endl; // 输出 4
-
指定返回类型:
auto multiply = [](double a, double b) -> double { return a * b; }; std::cout << multiply(3.5, 2) << std::endl; // 输出 7