前言
lambda在数学里写作-λ,俗称匿名表达式,使用它的目的是为了简化代码结构,增强可读性。
例如当重定义algorithm头文件中的sort方法的参数三时候,可以不单独使用代码段声明新方法作参数,可以进行如下操作:
sort(std::vector<int>:: begin,std::vector<int>:: end,[](int a,int b)->bool{if(a>b) return true;}())
lambda表达式结构
[capture list](parameter list)->return type{function body};
Capture list
capture list使用[]修饰,它描述除了形参之外函数体可以访问的变量范围及访问权限。
[=]表达式当前作用范围(也包括this)下变量都可以引用,传参方式为值传递;
[&]表达式当前作用范围(也包括this)下变量都可以引用,传参方式为引用;
[ ]无法使用形参之外的任何外部变量;
[name] 仅可以使用name变量的值,传参方式为值传递;
[&name] 可以使用、修改name的值,传参方式引用;
以上方法可以混合使用:
[=,&name] 略
[&,nmae] 略
[=,&namea,&nameb] 略
[&namea,nameb] 略
Parameter list&Return value&Function body
略
Example
sort(std::vector<int>:: begin,std::vector<int>:: end,[](int a,int b){if(a>b) return true;}());
int n1 = 1; int n2 = 1;
for (;n2<20; [&](){ int t = n2; n2 += n1; n1 = t;cout<<n2<<' '<<n1<<endl; }());
auto say=[](){cout<<"happy new year"<<endl;};
say();