含义
lambda表达式定义了一个匿名函数,并可以捕获一定范围内的变量。
语法:
[capture] (params) opt -> ret {body};
capture : 捕获列表。
params : 参数列表。
opt : 函数选项。
ret : 返回类型。
body : 函数体。
当函数返回值很明显时可省略 返回值定义 。 auto p =[](int i){return i;}
Capture 解释
lambda表达式可以通过捕获列表捕获一定范围内的变量。
- [] : 不捕获任何变量
- [&] : 捕获外部作用域中的变量,并作为引用在函数体中使用(按引用捕获)。
- [=] : 捕获外部作用域中所有变量,并作为副本在函数体中使用。(按值捕获)
- [=,&foo] : 按值捕获外部作用域中所有变量,并按引用捕获foo 变量。
- [bar]:按值捕获bar 变量,不捕获其他变量
- [this] : 捕获当前类中的this指针,让lambda表达式拥有和当前类成员函数同样的访问权限。
当修改按值捕获的外部变量时,需要显示指明lambda表达式为mutable.
int a =0 ;
auto f1 =[=]{return a++;} // error; 修改按值捕获的外部变量
auto f2 = [=]()mutable{return a++;} // right