lambda表达式
lambda表达式一般用于定义匿名函数,使得代码更加灵活简洁。lambda表达式与普通函数类似,也有参数列表、返回值类型和函数体,只是它的定义方式更简洁,并且可以在函数内部定义。
语法:[captures](params) ->trailing-return-type{body}
captures 捕获列表,lambda可以把上下文变量以值或引用的方式捕获,在body中直接使用
params 是传入的参数列表
->trailing-return-type表示返回值类型,可省略,但要写出时->和trailing-return-type必须同时出现
body 函数体,函数的具体逻辑
本文中程序可通过Visual Studio直接运行验证
1参数列表的使用
#include<iostream>
using namespace std;
int main() {
auto plus = [](int v1, int v2) -> int { return v1 + v2; };
int sum = plus(1, 2);
cout << sum << endl;
}
#include<vector>
#include <algorithm>
#include<iostream>
using namespace std;
struct Item
{
Item(int aa, int bb) : a(aa), b(bb) {}
int a;
int b;
};
int main()
{
std::vector<Item> vec;
vec.push_back(Item(1, 19));
vec.push_back(Item(10, 3));
vec.push_back(Item(3, 7));
vec.push_back(Item(8, 12));
vec.push_back(Item(2, 1));
//打印vec中的item成员
std::for_each(vec.begin(), vec.end(),
[](const Item& item) { std::cout << item.a << " " << item.b << std::endl; });
return 0;
}
2 捕获列表的使用
lambda表达式的可捕获的量的是在其定义点周围可见的局部变量和静态变量,以及非静态成员函数的this指针
[=] 按值(复制)的方式捕获所有可捕获的量
[&]