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

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

在这里插入图片描述

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

http://www.xdnf.cn/news/1558.html

相关文章:

  • TDengine 流计算引擎设计
  • windows中kafka4.0集群搭建
  • CLIP和SimCLR集成到图像-文本检索系统技术实现步骤和部署方案(代码版)
  • 【网络安全】网络钓鱼的类型
  • python异步
  • 专题二十:路由策略与策略路由
  • 内存管理(Linux程序设计)
  • [SystemVerilog]例化
  • 【蓝桥杯】 数字诗意
  • 使用Python创建带边框样式的Word表格
  • 利用爬虫获取 1688 商品详情:高效的数据采集方法
  • sglang部署DeepSeek-R1-Distill-Qwen-7B
  • box-sizing: border-box的用法和作用
  • C++开发基础之调试宏的理解和应用
  • 3.2 Agent核心能力:感知、规划、决策与执行
  • MineWorld,微软研究院开源的实时交互式世界模型
  • MySQL安装步骤
  • 【AI大模型】推理大模型与预训练大模型:架构差异与认知范式的技术解构
  • SpringBoot入门实战(第六篇:项目接口-登录)
  • AXOP39062: 25MHz轨到轨输入输出双通道运算放大器
  • 计算机网络 第二章:应用层(三)
  • rpm包管理
  • NAS功能特点及应用场景
  • 工作记录9
  • AI大模型和人脑的区别
  • VAE-LSTM异常检测模型复刻报告
  • 前端笔记-Vue router
  • 自主可控鸿道Intewell工业实时操作系统
  • 量子跃迁:Vue组件安全工程的基因重组与生态免疫(完全体)
  • Spring AI - Redis缓存对话