【C++】Lambda表达式的使用

您所在的位置:网站首页 lambda表达式优势 【C++】Lambda表达式的使用

【C++】Lambda表达式的使用

2023-11-11 03:02| 来源: 网络整理| 查看: 265

学习目标:

例如:

了解Lambda的优点 掌握Lambda表达式的使用 了解Lambda表达式的底层原理 学习内容: Lambda表达式的语法

文章目录 学习目标:学习内容:Lambda表达式排序案例Lambda表达式语法捕捉列表Lambda表达式模拟

Lambda表达式

lambda表达式的底层实现涉及到闭包(Closure)的概念。闭包是一个函数对象,它可以捕获外部作用域中的变量,并在其生命周期内访问和修改这些变量。lambda表达式的底层实现就是通过创建闭包来实现的。

具体而言,lambda表达式在底层会被转化为一个函数对象。这个函数对象中包含了捕获的外部变量,并且重载了函数调用运算符operator()。函数对象可以像普通的函数一样被调用,其执行的代码就是lambda表达式中的代码。

lambda表达式的展开过程包括以下几个步骤:

语法解析:将lambda表达式解析为函数对象的声明和定义。生成函数对象:根据lambda表达式的参数、返回类型和捕获列表等信息,生成一个函数对象。生成仿函数类:根据生成的函数对象,生成一个仿函数类(Functor),其中重载了函数调用运算符operator()。类型推导:根据lambda表达式中的代码和上下文,进行类型推导,确定函数对象的参数类型和返回类型。生成代码:根据类型推导的结果,生成调用函数对象的代码。调用lambda表达式:通过调用函数对象的operator(),执行lambda表达式中的代码。 排序案例

对于一个简单的数组来说:

#include #include #include using namespace std; int main(void) { vectorarr = { 9,8,5,6,3,2,1,5,12,13,14,520 }; sort(arr.begin(), arr.end()); for (auto& e : arr) { cout string _name; // 名字 double _price; // 价格 int _evaluate; // 评价 Goods(const char* str, double price, int evaluate) :_name(str) , _price(price) , _evaluate(evaluate) {} }; struct ComparePriceLess { bool operator()(const Goods& gl, const Goods& gr) { return gl._price return gl._price > gr._price; } }; int main(void) { vector v = { { "苹果", 2.1, 5 }, { "香蕉", 3, 4 }, { "橙子", 2.2,3 }, { "菠萝", 1.5, 4 } }; sort(v.begin(), v.end(), ComparePriceGreater()); for (auto& e : v) { cout string _name; // 名字 double _price; // 价格 int _evaluate; // 评价 Goods(const char* str, double price, int evaluate) :_name(str) , _price(price) , _evaluate(evaluate) {} }; int main(void) { vector v = { { "苹果", 2.1, 5 }, { "香蕉", 3, 4 }, { "橙子", 2.2,3 }, { "菠萝", 1.5, 4 } }; sort(v.begin(), v.end(), [](Goods& s1, Goods& s2)->bool{ return s1._price return s1._price > s2._price; }); for (auto& e : v) { cout return a + b; }; cout return b += a + c; }; cout cout 提示找不到operator=() // 允许使用一个lambda表达式拷贝构造一个新的副本 auto f3(f2); f3(); // 可以将lambda表达式赋值给相同类型的函数指针 PF = f2; PF(); return 0; } Lambda表达式模拟 auto print = [] {cout cout public: int operator()(int a, int b) const { return a + b; } };


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3