最小型的lambda函数
[]{ std::cout << \"Hello\" << std::endl; };

调用该函数:
[]{ std::cout << \"Hello\" << std::endl; }();

也可通过这种方式调用:
auto func = []{ std::cout << \"Hello\" << std::endl; };
func();

labmbda可以拥有参数:
auto func1 = [](const std::string& s){std::cout << s << std::endl;};
func1(\"Hello\");

注意:lambda不可以是template,始终要指明其所有类型

Lambda也可以返回某值,不需要指明返回类型,该类型可以根据返回值推导出来
[]{return 42;} 返回的是一个int类型
如果想指明返回类型,可以:
[]()->double { return 42; }

[]内可以指明一个capture用来处理外部作用域内未被传递为实参的数据
[=]:意味着外部作用域以传值的方式传递给lambda
[&]:意味着外部作用域以传引用的方式传递给lambda
可以个别指明lambda内所访问的对象是传值还是传引用:
int x = 0;
int y = 42;
auto func2 = [x, &y]{std::cout << \"x: \" << x << \"\\n\" << \"y: \" << y << std::endl;
++y};
func2();
std::cout << \"y: \" << y << std::endl;

可以声明lambda为mutable,获取修改传入的值的权限:
int id = 0;
auto func3 = [id]()mutable {std::cout << \"id: \" << id << std::endl; ++id;};
f(); //id=0
f(); //id=1
 

收藏 打印