1. lambda的声明方式
C++11的新特性,允许程序员再函数内部创建一个匿名函数,对于一些小型的功能模块可以使用lambda表达式实现,声明方式如下:
auto fadd=[](int a,int b)
{
return a+b;
}
fadd就是一个匿名函数,后面是它的实现,auto是自动类型,[]表示开始定义lambda表达式,可以带参数,()里面是函数的参数,{}里是函数体,也可以现视指明返回值:
auto fadd=[](int a,int b)->int
{
return a+b;
}
即声明形式:
[captures](params)->ret{Statements;}
2. lambda的变量截取
若lambda需要使用外部变量,则需要变量截取:
int val=1;
auto fadd=[&](int a,int b)->int
{
return a+b+val;
}
cout<<fadd(2,3)<<endl;
各种变量截取的选项:
- []不截取任何变量
- [&]截取外部作用域中的所有变量,并作为引用再函数体中使用
- [=]截取外部作用域中所有变量,并拷贝一份再函数体中使用
- [=,&foo]截取外部作用域中所有变量,并拷贝一份再函数体中使用但是对foo变量使用引用
- [bar]截取bar变量并且拷贝一份在函数体中使用,同时不截取其他变量
- [this]截取当前类中的this指针,如果已经使用&或者=就默认添加该项
欢迎扫描二维码关注微信公众号 深度学习与数学 [每天获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]