参考:
https://blog.csdn.net/lixiaogang_theanswer/article/details/80905445
基本定义
[capture](parameters) mutable ->return-type{statement}
最简单的lambda函数
#include <iostream> using namespace std;
int main()
{
auto foo = [] () { cout << "Hello world"; }; // 简单的lambda表达式,很多都省略了
foo(); // 输出 Hello world
}
[capture] 捕获列表
编译器通过此来判断后面是lambda表达式,里面列出需要捕获的变量
[] :默认不捕获任何变量;
[=] :默认以值捕获所有变量;
[&] :默认以引用捕获所有变量;
[x] :仅以值捕获x,其它变量不捕获;
[&x] :仅以引用捕获x,其它变量不捕获;
[=, &x] :默认以值捕获所有变量,但是x是例外,通过引用捕获;
[&, x] :默认以引用捕获所有变量,但是x是例外,通过值捕获;
[this] :通过引用捕获当前对象(其实是复制指针);
[*this] :通过传值方式捕获当前对象;
测试引用传递
代码片段:
float var = 1.2;
//1.Test 1
[](float& a){a= a+ 1.1; }(a); //result : 2.3
//2.Test 2
auto rst = [&]{var = var + 1.1;};
rst();//result : 2.3
上面Test1只是一般的函数调用,Test2是捕获外部的变量var。均改变var的值。