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

相关文章

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中定

Spring 中 BeanFactoryPostProcessor 的作用和示例源码分析

《Spring中BeanFactoryPostProcessor的作用和示例源码分析》Spring的BeanFactoryPostProcessor是容器初始化的扩展接口,允许在Bean实例化前... 目录一、概览1. 核心定位2. 核心功能详解3. 关键特性二、Spring 内置的 BeanFactory

Spring组件初始化扩展点BeanPostProcessor的作用详解

《Spring组件初始化扩展点BeanPostProcessor的作用详解》本文通过实战案例和常见应用场景详细介绍了BeanPostProcessor的使用,并强调了其在Spring扩展中的重要性,感... 目录一、概述二、BeanPostProcessor的作用三、核心方法解析1、postProcessB

MyBatis的配置对象Configuration作用及说明

《MyBatis的配置对象Configuration作用及说明》MyBatis的Configuration对象是MyBatis的核心配置对象,它包含了MyBatis运行时所需的几乎所有配置信息,这个对... 目录MyBATis配置对象Configuration作用Configuration 对象的主要作用C

MySQL表锁、页面锁和行锁的作用及其优缺点对比分析

《MySQL表锁、页面锁和行锁的作用及其优缺点对比分析》MySQL中的表锁、页面锁和行锁各有特点,适用于不同的场景,表锁锁定整个表,适用于批量操作和MyISAM存储引擎,页面锁锁定数据页,适用于旧版本... 目录1. 表锁(Table Lock)2. 页面锁(Page Lock)3. 行锁(Row Lock