目录
语法:
[] ()->ret{
std::cout<<"hello world"<<std::endl;
return 1;
}();
- [ ] : 捕获列表,表示lambda可以访问前文的那些变量C++14中,添加了可以在捕获列表中直接声明变量的语法 [a = 10 ], 不需要也不能制定变量类型,会自动推导。
- ( ) :参数列表,用法与普通函数一致。
- ->ret :返回值类型,可以不写,会自动推导。
- { } : 函数体,用法与普通函数一致。
- () : 表示对该lambda表达式的调用。
参数 | 意义 |
---|---|
[空] | 表示不捕获任何变量 |
[=] | 表示捕获所有变量 |
[&] | 表示按照引用捕获所有变量 |
[ = ,&i] | 表示变量I用引用传递,除i的所有变量用值传递 |
[&,i] | 表示变量i用值传递,除i的所有变量用引用传递 |
[i] | 表示以捕获值的方式捕获变量i |
[&i] | 以引用的方式捕获i |
常见用法:
1. 给回调函数做参数,回调函数详见 『C++』回调函数_顽張先生的博客-CSDN博客
using pf_type = void(*)(int); //定义函数指针
void myFunc(pf_type pf ,int i){ //myFunc函数传入一个函数,和一个整形.
pf(i); //传入的整形变量作为传入函数的参数.
}
myFunc([] (int i){ //将lambda表示式作为参数传入函数。
cout<<"lambda"<<endl;
cout<<"i"<<endl;
},200);
2.简化代码
lambda实质是重载了()的类,所以我们可以用他来代替重载()所做的事,起来简化代码的作用。
#不使用lambda表达式重载()效果
//不使用lambda表达式所要重载()的效果,显得代码冗余
class Test
{
public:
int operator()(int a ,int b ) //该类重载了()
{
return a * b;
}
};
test01()
{
Test test;
cout<<"10 * 20 = "<<test(10,20)<<endl;
}
#使用lambda表达式效果:
//使用lambda表达式简化代码,是不是清新许多.
test02()
{
auto test_ = [](int a,int b ){return a*b ;};
cout<<"10 * 20 = "<<test_(10,20) << endl;
}
本文含有隐藏内容,请 开通VIP 后查看