Lambda表达式是C++11 引入的一种匿名函数的方式,它允许你在需要函数的地方内联地定义函数,而无需单独命名函数
Lambda表达式的基本语法如下:
[capture clause](parameters) -> return_type {
// 函数体
// 可以使用捕获列表中的变量
return expression; // 可选的返回语句
}
Lambda表达式由以下部分组成:
·捕获列表(Capture clause):用于捕获外部变量,在 Lambda 表达式中可以访问这些变量。捕
获列表可以为空,也可以包含变量列表
[var1, var2, ...]
。
·参数列表(Parameters):与普通函数的参数列表类似,可以为空或包含参数列表 (param1,
param2, ...)
。
·返回类型(Return type):
Lambda
表达式可以自动推断返回类型
auto
,也可以显式指定返回类
型
-> return_type
。如果函数体只有一条返回语句,可以省略返回类型
函数体(
Body
)
:
Lambda
表达式的函数体,包含需要执行的代码。
示例:使用lambda表达式进行加法
#include <iostream>
using namespace std;
/*
int add(int a,int b){
return a + b;
}
*/
int main()
{
int x = 50;
int y = 20;
//Lambda表达式
auto add = [](int a,int b)->int{
return a+b;
};
int ret = add(x,y);
cout << ret;
return 0;
}
在这个例子中:
·我们定义了一个名为add的Lambda表达式,它接受两个整数参数,并返回他们的和。
·然后,我们使用这个Lambda表达式来计算两个数字(50和20)的和,并将结果存储在变量ret中
·最后,我们打印出这个和
这个例子展示了
Lambda
表达式的基本用法:作为一种简洁而快速的方式来定义小型函数。
我们可以写一个例子,其中使用一个函数来找出两个数中的较大数,这个函数接受一个Lambda函数作为回调来比较这两个数。Lambda函数将直接在函数调用时定义,完全是匿名的。
#include <iostream>
using namespace std;
/*
bool compare(int a,int b)
{
return a>b;
}
*/
//回调函数,获取两数最大值 函数指针:一个变量,指向的是函数入口的地址
int getMax(int a,int b,bool (*p1)(int a,int b))
{
if(p1(a,b))
{
return a;
}else{
return b;
}
}
int main()
{
int x = 20;
int y = 60;
//int max = getMax(x,y,compare);
int max = getMax(x,y,[](int a,int b)->bool{
return a>b;
});
cout << max << endl;
return 0;
}
在这个例子中:
getMax
函数接受两个整数
a
和
b
,以及一个比较函数
compare
。这个比较函数是一个指向函数
的指针,它接受两个整数并返回一个布尔值。
在
main
函数中,我们调用
getMax
,并直接在调用点定义了一个匿名的
lambda
函数。这个
lambda
函数接受两个整数并返回一个表示第一个整数是否大于第二个整数的布尔值。
这个
lambda
函数在
getMax
中被用作比较两个数的逻辑。根据
lambda
函数的返回值,
getMax
返回较大的数。