在C++中,lambda表达式是一种简洁的方式,用于直接在代码中定义匿名函数或函数对象(也称为闭包)。Lambda表达式在C++11中引入,提供了一种更便捷的语法,用于创建短小的、局部的函数,无需单独的函数声明。
lambda表达式的基本语法如下:
[capture](parameters) -> return_type {
// 函数体
}
让我们来解释一下各个组成部分:
-
捕获子句 (
[capture]
): 允许从周围范围中捕获变量。捕获子句可以为空 ([]
),通过值捕获特定变量 ([var1, var2]
),通过值捕获所有变量 ([=]
),通过引用捕获特定变量 ([&var1, &var2]
),或者通过引用捕获所有变量 ([&]
)。 -
参数列表 (
(parameters)
): 类似于常规函数声明中的参数列表。 -
返回类型 (
-> return_type
): 指定lambda表达式的返回类型。这部分是可选的,如果省略,则从lambda体内的返回语句中推断返回类型。 -
函数体
{ /* code */ }
: 包含lambda函数的实际代码。
下面是一个示例,演示了lambda表达式的用法:
#include <iostream>
int main() {
// Lambda表达式,接受两个整数并返回它们的和
auto add = [](int a, int b) -> int {
return a + b;
};
// 使用lambda函数
int result = add(3, 5);
std::cout << "结果:" << result << std::endl;
return 0;
}
在这个例子中,lambda表达式捕获了零个变量 ([]
),接受两个整数参数 (int a, int b
),指定了返回类型 (-> int
),并将两个参数相加,返回结果。
Lambda表达式通常用于需要短小、一次性使用的函数的情况,例如在使用将函数对象作为参数的算法或其他场景中,其中不需要命名函数。