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

CPP中lamada表达式作用一览[more cpp-6]

一般语法

CPP中的lambda 表达式的本质就是匿名函数,它可以在代码中定义一个临时的、局部的函数.为什么需要lamada表达式?

因为命名是个大问题 想名字以及避免命名冲突是很劳神费力的事,这就是lamada表达式的优点(lamada优点表现为简洁性)总的来说,一般的表达

[](){...... ;return };
  • []表示捕获变量,就是从外界直接获取的变量
  • ()表示传入lamada的参数
  • {}表示lamada执行的代码,返回值可有可无

具体细节

捕获的用法:按引用的捕获

int main() {int value = 10;//[]() {value *= 2; }   报错value不在捕获列表中[&]() { value *= 2; }();//这表示一个立即执行的lamada表达式cout << "value:  " << value << endl;return 0;
}
value:  20

捕获方法中,写明& ,则表示按照引用的方法去捕获外部变量,这里看出value的值被直接改变了

捕获的用法:按照值的捕获

int main() {int value = 10;//[]() {value *= 2; }   报错value不在捕获列表中[value]() {cout << value * 2 << endl;//value*=2;报错:表达式必须是可以修改的左值//因为这里只是按值传递,你写value=value*2是不行的}();//这表示一个立即执行的lamada表达式cout << "value:  " << value << endl;return 0;
}

混合模式

[&value,num]()
{
value*=num;
}

这里表示捕获value的引用和捕获num的副本

简单用法

使lamada具名
int main() {auto fun=[]() {std::cout << "HELLO LAMADA" << std::endl;}; cout << "___________" << endl;fun();cout << typeid(fun).name() << endl;return 0;
}

运行结果

___________
HELLO LAMADA
class `int __cdecl main(void)'::`2'::<lambda_1>

在VS中查看fun的属性,弹出的是:

在这里插入图片描述

立即执行的lamada
 // 立即执行的 lambda 表达式[]() {std::cout << "HELLO LAMADA" << std::endl;}(); // 末尾的 () 表示立即执行,相当于省略上一步的具名,直接调用
递归的lamada
	auto recursion = [](auto&& recursion, int num){if (num == 0) return;cout << num << " ";recursion(recursion, num - 1);};recursion(recursion, 6);

运行结果

6 5 4 3 2 1

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Junit单元测试笔记
  • 继承的初始化顺序
  • 解析Java中1000个常用类:ServiceLoader类,你学会了吗?
  • SpringBoot工厂模式
  • 【重点】人工智能大语言模型技术发展研究报告2024|附下载
  • 旅游社交小程序的设计
  • 借题《黑神话悟空》,聊聊UE5 游戏开发中基本的 C++ 概念
  • 如何在分布式环境中实现高可靠性分布式锁
  • 我在某日重新下载了idea
  • Vue中字节流格式的 Base64编码转换为 Blob 对象保存成wav的音频文件
  • Jmeter性能关注指标详解
  • Day18_Netty
  • Spark MLlib 特征工程系列—特征转换SQLTransformer
  • 数学建模学习(127):基于Python的模糊最佳-最差法(Fuzzy BWM)在多准则决策中的应用
  • 8.20-ansible剧本的使用+roles的应用
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • Android单元测试 - 几个重要问题
  • Fabric架构演变之路
  • iOS编译提示和导航提示
  • JavaScript异步流程控制的前世今生
  • Kibana配置logstash,报表一体化
  • 闭包,sync使用细节
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 用简单代码看卷积组块发展
  • Spring第一个helloWorld
  • 如何用纯 CSS 创作一个货车 loader
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • # 达梦数据库知识点
  • #宝哥教你#查看jquery绑定的事件函数
  • (2)MFC+openGL单文档框架glFrame
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (七)Flink Watermark
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (算法)Game
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)linux下的时间函数使用
  • (转)甲方乙方——赵民谈找工作
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .net mvc 获取url中controller和action
  • .NET 中让 Task 支持带超时的异步等待
  • .project文件
  • ::
  • @RunWith注解作用
  • @synthesize和@dynamic分别有什么作用?
  • [bzoj1912]异象石(set)
  • [C++进阶]map和set的相关题目
  • [CISCN2019 华东南赛区]Web11
  • [codevs1288] 埃及分数
  • [Deepin] 简单使用 RustDesk 实现远程访问Deepin