- Lambda表达式是一种匿名函数,可以在程序中直接定义和使用,不需要单独命名。
- 提供一种方便的方式来定义行为,在需要将函数作为参数传递给其他函数或者需要一个临时的函数对象时非常有用。
- Lambda表达式的一般语法:
[capture list] (parameter list) -> return type
{
// 函数体
};
- capture list:用来捕获外部变量的列表,可以是空的,按值捕获或按引用捕获。实际上,[ ]是Lambda引出符,编译器根据该引出符判断接下来的代码是否是Lambda函数,捕获列表能够捕捉上下文中的变量以供Lambda函数使用。
- parameter list:Lambda表达式的参数列表,可以为空或包含一个或多个参数。若不需要参数传递,可以连同()一起省略。
- return type:返回值的类型,可以省略。如果省略则根据返回值推断类型。
4.ISO C++标准官网展示的简单的lambda表示式示例:
#include <algorithm>
#include <cmath>
void abssort(float* x, unsigned n)
{
std::sort(x, x + n,
// Lambda expression begins
[](float a, float b)
{
return (std::abs(a) < std::abs(b));
}
// end of lambda expression
);
}
- std::sort()函数的第三个参数是传递一个排序规则的函数,实例中直接将排序函数的实现写在应该传递函数的位置,省去了定义排序函数的过程。
- 对于这种不需要复用且短小的函数,直接传递函数体可以增加代码的可读性。
5. 示例2:Lambda表达式定义了一个求两个数的和的函数。通过auto关键字定义了一个变量sum来接收Lambda表达式,然后使用sum变量来调用Lambda表达式并传入参数。
#include <iostream>
int main() {
int x = 5;
int y = 2;
// Lambda表达式,求两个数的和
auto sum = [](int a, int b) -> int {
return a + b;
};
// 调用Lambda表达式
int result = sum(x, y);
std::cout << "Sum: " << result << std::endl;
return 0;
}