Lambda表达式
文章目录
- 0.lambda表达式的概念
- 1.lambda表达式的形式:`[](){}`
- 2.提出原因
- 3.demo
- 4.lambda表达式的接收
- 5.捕获类中的数据成员
- 6.lambda表达式本质是仿函数
0.lambda表达式的概念
Lambda 表达式是 C++11 引入的一项特性,它允许你定义匿名的内联函数,通常用于需要短小功能的地方,尤其是用于算法、回调函数或者并行计算等场景。Lambda 表达式的语法和函数类似,但它可以直接嵌入到代码中,而不需要单独定义一个函数。
1.lambda表达式的形式:[](){}
①[ ]:捕获列表,捕获外部变量。只读属性,非要修改需要加&。
多个特定变量用,
分割
全局变量不需要捕获,直接使用
[=]
:按值捕获所有变量
[&]
:按引用捕获所有变量
[&,x]
:混合捕获,按引用捕获所有变量,特定变量x按值捕获
[this]
:捕获当前类的this指针
②( ):函数的参数列表。没有参数的lambda表达式,可以省略 ( )。
③{ }:函数的函数体
[capture](params) opt -> returnType
{body;
}
2.提出原因
为了避免func和for_each不在同一个文件,C++为了避免这种跨文件查询的麻烦,提出了lanmda表达式。lambda表达式可以看作是仿函数。
//1.引入lambda表达式的好处:原本的函数指针,现在声明和实现可以写在一起
//2.lambda表达式的形式: [](){}#include <iostream>
#include <vector>
#include <algorithm>
using std::cout;
using std::endl;
using std::vector;void func(int value){cout << value << " ";
}void test(){vector<int> vec = {1,3,5,7,9};for_each(vec.begin(), vec.end(), func);cout << endl;
}//为了避免func在不同的文件中,考虑用lambda表达式,就可以把声明和实现写在一起了
void test2(){vector<int> vec = {2,4,6,8,10};//将func用lambda表达式实现for_each(vec.begin(), vec.end(), [](int value){ cout << value << " "; });cout << endl;
}int main()
{test(); test2(); return 0;
}
3.demo
//lambda.cpp
(1)捕获:按值捕获、按引用捕获
(2)lambda表达式中捕获的是const版本的变量,若要修改:
①按引用捕获,可在lambda表达式内修改原变量的值
②加mutable关键字,可在lambda表达式内修改副本
(3)函数的返回类型
4.lambda表达式的接收
使用变量接收lambda表达式,以期可以在别处调用lambda表达式
5.捕获类中的数据成员
6.lambda表达式本质是仿函数
还原网址:把代码还原成编译器的角度