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

2024-08-26 05:36

本文主要是介绍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

这篇关于CPP中lamada表达式作用一览[more cpp-6]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1107689

相关文章

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

css中的 vertical-align与line-height作用详解

《css中的vertical-align与line-height作用详解》:本文主要介绍了CSS中的`vertical-align`和`line-height`属性,包括它们的作用、适用元素、属性值、常见使用场景、常见问题及解决方案,详细内容请阅读本文,希望能对你有所帮助... 目录vertical-ali

SpringBoot @Scheduled Cron表达式使用方式

《SpringBoot@ScheduledCron表达式使用方式》:本文主要介绍SpringBoot@ScheduledCron表达式使用方式,具有很好的参考价值,希望对大家有所帮助,如有... 目录Cron 表达式详解1. 表达式格式‌2. 特殊字符解析3. 常用示例‌4. 重点规则5. 动态与复杂场景‌

Spring Boot 集成 Quartz 使用Cron 表达式实现定时任务

《SpringBoot集成Quartz使用Cron表达式实现定时任务》本文介绍了如何在SpringBoot项目中集成Quartz并使用Cron表达式进行任务调度,通过添加Quartz依赖、创... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启

浅析CSS 中z - index属性的作用及在什么情况下会失效

《浅析CSS中z-index属性的作用及在什么情况下会失效》z-index属性用于控制元素的堆叠顺序,值越大,元素越显示在上层,它需要元素具有定位属性(如relative、absolute、fi... 目录1. z-index 属性的作用2. z-index 失效的情况2.1 元素没有定位属性2.2 元素处

Spring Boot中定时任务Cron表达式的终极指南最佳实践记录

《SpringBoot中定时任务Cron表达式的终极指南最佳实践记录》本文详细介绍了SpringBoot中定时任务的实现方法,特别是Cron表达式的使用技巧和高级用法,从基础语法到复杂场景,从快速启... 目录一、Cron表达式基础1.1 Cron表达式结构1.2 核心语法规则二、Spring Boot中定