当前位置: 首页 > news >正文

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表达式本质是仿函数

在这里插入图片描述

还原网址:把代码还原成编译器的角度
在这里插入图片描述
在这里插入图片描述

相关文章:

  • 硬件知识点-----SPI串联电阻、振铃、过冲
  • onlyoffice8.3.3发布了-豆豆容器市场同步更新ARM64版本
  • 220V降24V500mA非隔离恒压芯片WT5110
  • SFINAE(Substitution Failure Is Not An Error)
  • MySQL数据库概述
  • 【Java实战经验】泛型-类型灵活使用与限制
  • flutter 小知识
  • BERT BERT
  • Nginx 安装与配置全流程指南(2025 最新版)
  • (树状数组)洛谷 P6119/P3657 Why Did the Cow Cross the Road II G/P 题解
  • QLExpress 深度解析:构建动态规则引擎的利器
  • 摘要 | 李录在北大光华管理学院的演讲《价值投资》
  • Spark-Streaming核心编程
  • Java集成【邮箱验证找回密码】功能
  • 聊聊Spring AI Alibaba的OneNoteDocumentReader
  • 实现Variant
  • AI赋能Python长时序植被遥感动态分析、物候提取、时空变异归因及RSEI生态评估
  • 系统高性能设计核心机制图解:缓存优化、链表调度与时间轮原理
  • 白鲸开源WhaleStudio与崖山数据库管理系统YashanDB完成产品兼容互认证
  • 麒麟系统离线安装软件方法(kazam录屏软件为例)
  • 韩国对华中厚板征收临时反倾销税
  • 青海西宁市公安局原党委委员、副局长王小华被“双开”
  • 吉林建筑大学党委原书记崔征接受纪律审查和监察调查
  • 体坛联播|AC米兰挺进意大利杯决赛,弗雷戴特宣布退役
  • 官宣一起打造智能汽车品牌后,华为喊话上汽要准备好足够产能
  • 【社论】上海车展40年,见证了什么