lambda
lambda是一种可调用对象,它具有如下的形式:1
[](param list)->return type {function body};
其中[]
叫做capture list,(param list)是参数列表,return type是返回值类型,{function body}是函数体。
capture list和function body不能忽略,其他的部分都可以忽略。
向lambda传递参数
capture list和param list可以传递参数。capture list传递的是当前函数内的局部变量,表示lambda未来会使用这些变量,param list是lambda接受的参数。
capture list内可以是value capture,也可以是reference capture。它们的区别?
- value capture需要变量可以拷贝,而且是在lambda创建时拷贝,而不是调用时。在创建后对变量的修改,不会改变lambda内对应的值。
- reference capture实际上使用的是引用绑定的对象,需要注意,在调用时,要保证这个引用所绑定的变量是存在的。
隐式capture
capture list中指定=或者&可以自动推断lambda中可能用到的局部变量。隐式capture和显式capture可以同时存在。
指定返回类型
如果lambda中包含超过一个return之外的语句,编译器假定它返回void,然后就不会return了。lambda可以指定返回类型:1
[](param list)->return type {function body};
参考文献
1.《C++ Primer》第五版中文版