高放的c++学习笔记之lambda表达式

时间:2023-03-08 15:36:09
高放的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表达式不允许有默认参数,也就是形参和实参的数量必须相等。