Lambda 表达式:
[捕获外部变量列表] (函数形参列表) mutable 或 exception 声明 -> 返回值类型 {函数体}
[capture list] (params list) mutable exception -> return type { function body }
表达式中各个参数的含义如下:
[capture list]:捕获外部变量列表
(params list):形参列表
mutable:表示能不能修改捕获的变量
exception:异常设定
return type:返回类型
function body:函数体
例:
[] (int x, int y) -> int { int z = x + y; return z; }
Lambda表达式称为匿名函数,所谓匿名函数,有以下两方面的含义
(1)Lambda表达式是函数的一种,从功能上看,Lambda表达式和函数的作用完全一样(虽然Lambda表达式实质是一个类),
使用Lambda表达式完成的功能,也可以使用普通函数来完成;
(2)Lambda表达式是匿名的,即没有名字,而普通函数必须有函数名;其实,Lambda表达式也是可以命名的,
然后通过名字来调用Lambda表达式,所以,Lambda表达式可以匿名,但不是必须匿名。
[]捕获列表说明:
[],空捕获列表,不捕获任何外部变量,此时引用外部变量则会提示编译错误
[=],默认按值捕获全部变量
[&],默认按引用捕获全部变量
[=, &var1, &var2],默认按值捕获全部变量, 但是变量var1、var2按引用捕获
[&, =var1, =var2],默认按引用捕获全部变量, 但是变量x,变量y按值捕获
[&, var1, var2],效果同上, 即变量名前面没有写 = 或者 & 时,默认为按值捕获
[var1, var2],只按值捕获变量var1、 var2
[&var1, &var2],只按引用捕获变量var1、 var2
[var1, &var2],只按值捕获变量var1, 按引用捕获变量var2
[this],捕获this指针,然后在Lambda表达式内部就可以直接引用类成员了
|