C++初学者指南-6.函数对象–lambdas(基础)
文章目录
- C++初学者指南-6.函数对象--lambdas(基础)
- 提醒:函数类和对象
- Lambdas
- 变量捕获
- 保存闭包
- 通用Lambdas (C++14)
- 广义捕获 (C++14)
- 相关内容
幻灯片
提醒:函数类和对象
- 类至少提供一个operator () (…) {…} 函数
- 能像一个函数一样被调用
- 可以是有状态的(不像函数)
Lambdas
- 编译器生成的函数对象
- 可以像匿名函数一样使用
用分组排序算法partition进行示例
下图为partition算法使用区间的示例
下图为partition算法使用lambda的示例
变量捕获
- lambda类 = 编译器生成的类
- 闭包(closure) = lambda类的实例(对象)
- 我们可以“捕捉”周围范围的变量:
[=] (…) {…} 按值捕获变量
变量捕获: - [=] (…) {…} 按值捕获
- [&] (…) {…} 按引用捕获
- [x, &y] (…) {…} x按值捕获,y按引用捕获
- [=, &y] (…) {…} 所有都按值捕获,除了y
保存闭包
闭包的类型名称只有编译器知道。
=> 如果你需要保存闭包,使用 auto。
通用Lambdas (C++14)
广义捕获 (C++14)
对如下有用:
- 向闭包添加新的成员变量
- 将对象移动到闭包中
相关内容
函数对象
视频:Back to Basics: Lambdas (Nicolai Josuttis, 2021)
视频:Lambdas in Action (CopperSpice C++)
视频:Lambdas in C++ (CopperSpice C++)
附上原文链接
如果文章对您有用,请随手点个赞,谢谢!^_^