lambda表达式
定义:
一个lambda表达式表示一个可调用的代码单元。我们可以将其理解为一个未命名的内联函数。与任何函数类似,一个lambda具有一个返回类型,一个参数列表和一个函数体。但与函数不同,lambda可以定义在函数内部。一个lambda表达式具有如下形式
[capture list](parameter list)-> return type {function body}。
其中capture list(捕获列表)是一个lambda表达式所在函数中定义的局部变量的列表(通常为空),return type、parameter list和function body与任何函数一样,分别表示返回类型、参数列表和函数体。但与普通函数不同,lambda必须使用尾置返回来指定返回类型。
注意:
在lambda中忽略括号和参数列表等价于指定一个空参数列表。
如果忽略返回类型,lambda根据函数体中的代码推断出返回类型。如果函数体只有一个return语句,则返回类型从返回的表达式的类型推断而来。否则,返回类型为void。
向lambda传递参数:
与普通函数不同,lambda不能有默认参数(参数)。因此,一个lambda调用的实参数目永远与形参数目相等。
例子
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 [] (const string &a, const string &b) {return a.size() < b.size();}
- 空捕获列表表示此lambda不适用所在函数的局部变量。
使用捕获列表:
一个lambda可以出现在一个函数中,使用其局部变量,但只能使用那些明确指明的变量。一个lambda通过将局部变量包含在其捕获列表中来指出会使用这些变量。捕获列表指引lambda在其内部包含访问局部变量所需的信息。
例子
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 [sz] (const string &a) 2 {return a.size() >= sz;}
lambda以一对[]开始,在其中提供以逗号分隔的名字列表,这些名字都是它所在函数中定义的。