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调用的实参数目永远与形参数目相等。

例子

1 []  (const string &a, const string &b) {return a.size() < b.size();}
View Code
  • 空捕获列表表示此lambda不适用所在函数的局部变量。

使用捕获列表:

一个lambda可以出现在一个函数中,使用其局部变量,但只能使用那些明确指明的变量。一个lambda通过将局部变量包含在其捕获列表中来指出会使用这些变量。捕获列表指引lambda在其内部包含访问局部变量所需的信息。

例子

1 [sz] (const string &a)
2     {return a.size() >= sz;}
View Code

lambda以一对[]开始,在其中提供以逗号分隔的名字列表,这些名字都是它所在函数中定义的。

posted on 2017-05-11 11:29  xdzhanght  阅读(347)  评论(0编辑  收藏  举报

导航