lambda
可调用对象:对于一个对象或一个表达式,如果可以对其使用调用运算符,则称它为可调用的。
四种可调用对象:函数和函数指针,重载了函数调用运算符的类,以及lambda表达式。
lambda可能定义在函数内部,一个lambda表达式具有如下形式:
[capture list](parameter list) -> return type { function body }
capture lis(捕获列表)是一个lambda所在函数中定义的局部变量的列表,lambda必须使用尾置返回来指定返回类型。
可以忽略参数列表和返回类型,但必须永远包含捕获列表和函数体
如果忽略返回类型,lambda根据函数体中的代码推断出返回类型
向lambda传递参数
与普通函数不同,lambda不能有默认参数(即缺省值)
使用捕获列表
一个lambda可以出现在一个函数中,使用其局部变量,在其中提供一个以逗号分隔的名字列表。
被捕获的变量的值是在lambda创建时拷贝,而不是调用时拷贝
默认情况下,对于一个值被拷贝的变量,lambda不会改变其值。如果希望改变,就必须在参数列表首加上关键字mutable。
//lambda可以看成一个未命名的类,其中的捕获列表可以看成是数据成员