高放的c++学习笔记之lambda表达式
lambda表达式:可以让代码看起来更整洁,有些结构简单且用的次数少的函数可以用lambda表达式替代,
通常结构是这样的[捕获列表](参数列表){函数部分}
捕获列表:
lambda表达式如果在一个函数里面,如果想要使用函数里面的变量的话,那么必须要将使用的变量写在捕获列表里面;
也就是说:
void cmp(){
int a;
[](){return a;};
}
是通不过编译的
只能这样:
void cmp(){
int a;
[](){return a;};
}
如果lambda表达式在类的里面的话,原则如上。
如果表达式写在类的函数里面的话,那么是不能直接使用类里面的变量的,通过试验。
经过捕获,表达式只能使用上一层里面的变量。
全局变量随便使用。
如果不在捕获列表里面声明的话,lambda表达式不能使用任何局部变量。
捕获列表有以下几种:
值捕获都不可以改变变量
[] 空捕获,不能使用函数里面的变量。
[names] names是逗号分割的捕获类表。
[&] 隐式捕获,所有捕获都以引用的方式。
[=] 隐式捕获,拷贝所有实体的值。
[&, names] names自定义捕获,其他的以引用方式捕获。
[=,names] names自定义捕获,其他的值捕获。
传参列表:(相当于函数的参数列表)
lambda表达式不允许有默认参数,也就是形参和实参的数量必须相等。