一、表达式
[capture] {params} opt -> ret {body;}; capture 捕获列表 params 参数列表 opt 函数选项 ret 返回类型 body 函数体
二、捕获列表
[]不捕获任何变量 [&] 捕获外部作用域中所有变量 引用 使用 [=] 捕获外部作用域中所有变量按 值 使用 [=,&foo] 捕获外部作用域中所有变量按 值 使用,foo 引用 使用 [bar] 捕获bar按 值 使用 [this] 捕获当前类的this指针
注意 :lambda表达式按值捕获的变量,变量发生变化,调用表达式使用的还是之前捕获的值
int a = 0; auto f = [=]{return a;} a += 1; std::cout<<f()<<std::endl;//输出0
如果希望修改按置捕获的外部变量
int a = 0; auto f1 = [=]() mutable{return ++a; }; std::cout << f1();
注意 :mutable修饰的lambda表达式要写明参数列表,即()
三、参数列表
注意 :无参数时参数列表可以省略