1.lamba表达式定义
[captures] <tparams>(optional,c++20) (parameters) specifiers exception attr -> return_type requires(optional,c++20) {body}
captures:捕获变量,捕获变量的方式有两种:按引用捕获和按复制捕获。
parameters: lambda 表达式接受的参数,就像函数参数一样。
return_type:函数返回值类型。
body:语句块;里面写函数。
常见模式:
[captures] (parameters) -> return_type {body}
2. 应用
利用lamba表达式实现降序排序;
3.捕获
-
[] 不捕获任何变量
-
[&] 按引用捕获外部作用域中的全部变量
-
[=] 按赋值捕获外部作用域中的全部变量
-
[a] 按赋值捕获变量 a
-
[=, &a] 按赋值捕获外部作用域中的全部变量,按引用捕获变量 a
-
[this] 捕获当前类的 this 指针
实例:
#include <iostream>
int main() {
int a = 1;
int b = 2;
int c = 3;
auto lambda1 = [&]{
a = 4;
b = 5;
c = 6;
};
lambda1();
std::cout<<a<<" "<<b<<" "<<c<<std::endl;
}
输出结果
a=4,b=5,c=6;
引用捕获可以更改值;
#include <iostream>
int main() {
int a = 1;
int b = 2;
int c = 3;
auto lambda1 = [=]{
a = 4;
b = 5;
c = 6;
};
lambda1();
std::cout<<a<<" "<<b<<" "<<c<<std::endl;
}