C++ lambda表达式(详解版)
Lambda 表达式是从类创建函数对象的精简方式。这里讲的类,它仅有的成员就是函数调用运算符。
Lambda 表达式取消了类声明,并且使用了精简的符号来表示函数调用运算符的逻辑。例如,以下函数对象的Lambda表达式可以计算两个整数之和:
Lambda 表达式通过在它后面放置一个真实形参列表来调用。例如,以下代码段将打印值 7,也就是变量 x 和 y 之和:
例如,可以按如下方式给 Lambda 表达式分配一个名称:
Lambda 表达式取消了类声明,并且使用了精简的符号来表示函数调用运算符的逻辑。例如,以下函数对象的Lambda表达式可以计算两个整数之和:
[](int a, int b) { return x + y; }
以下函数对象的 Lambda 表达式可以确定某个整数是否为偶数:[](int a) { return a % 2 == 0; }
以下 Lambda 表达式釆用了一个整数作为输入,然后打印该整数的平方值:[](int a) { cout << a * a << " "; }
以上显示的 Lambda 表达式其实是函数的基础定义,但函数的名称和返回类型则使用 一对空白方括号[]来替代。Lambda 表达式经常釆用以下形式:[捕获从句](形参列表){函数体}
捕获从句是 Lambda 表达式作用域中的变量列表,可以从 Lambda 表达式的函数体访问。这与常规函数定义列出所有可以访问的全局变量相似。本节所使用的 Lambda 表达式均不使用捕获从句,所以对这个概念不做进一步的讨论。Lambda 表达式通过在它后面放置一个真实形参列表来调用。例如,以下代码段将打印值 7,也就是变量 x 和 y 之和:
int x = 2; int y = 5; cout << [](int a, int b) { return a + b;} (x, y);以下代码段将按降序对数组排序,它使用了 Lambda 表达式来代替函数对象作为排序函数的第 3 个参数:
double d_values[]{ 12.7, 45.9, 6.9}; //以降序排序数组 sort( begin(d_values), end(d_values),[](auto a, auto b) {return a > b;}); //打印数组 for (auto x : d_values) { cout << x << " "; }因为 Lambda 表达式是函数对象,所以,可以将 Lambda 表达式赋值给一个类型适合的变量,并通过变量名来调用它。
例如,可以按如下方式给 Lambda 表达式分配一个名称:
auto compare = [](auto a, auto b) {return a > b;};
这样做可以将代码分割成更小的块,使它更易读。以下就是将上面的代码段重新编写,引用变量(变量的值为 Lambda 表达式)之后的结果:double d_values[]{ 12.7, 45.9, 6.9}; // Lambda表达式 auto compare = [](auto a, auto b) {return a > b;}; //以降序排序数组 sort( begin(d_values), end(d_values),compare); //打印数组 for (auto x : d_values) { cout << x << " "; }
所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频