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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/52501.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在不格式化的情况下解锁 Android 智能手机密码

如果您忘记密码&#xff0c;您的 Android 移动设备将锁定您。发生这种情况时&#xff0c;通常可以通过恢复出厂设置来重新获得对设备的访问权限。可悲的是&#xff0c;这将导致所有数据丢失。下面列出的是解锁锁定的Android 手机而不会丢失任何个人数据的有效方法。 Android 手…

编程学习中的“知识宝库”打造秘籍

编程学习中的“知识宝库”打造秘籍 在编程学习的道路上&#xff0c;我们犹如航海家在知识的海洋中探索前行。而高效的笔记记录和整理方法&#xff0c;无疑就是那张珍贵的航海图&#xff0c;引领我们在浩瀚的编程知识海洋中找到方向。 一、为什么需要一个好的笔记系统 编程知…

Ps:首选项 - 界面

Ps菜单&#xff1a;编辑/首选项 Edit/Preferences 快捷键&#xff1a;Ctrl K Photoshop 首选项中的“界面” Interface选项卡可以定制 Photoshop 的界面外观和行为&#xff0c;从而创建一个最适合自己工作习惯和需求的工作环境。这些设置有助于提高工作效率&#xff0c;减轻眼…

单片机外部中断+定时器实现红外遥控NEC协议解码

单片机外部中断定时器实现红外遥控NEC协议解码 概述解码过程参考代码 概述 红外(Infrared&#xff0c;IR)遥控&#xff0c;是一种通过调制红外光实现的无线遥控器&#xff0c;常用于家电设备&#xff1a;电视机、机顶盒等等。NEC协议采用PPM(Pulse Position Modulation&#x…

算法题目杂记

差分 来源 https://www.acwing.com/problem/content/799/ 题目 输入一个长度为 n的整数序列。 接下来输入 m个操作&#xff0c;每个操作包含三个整数 l,r,c&#xff0c;表示将序列中 [l,r] 之间的每个数加 c。 请你输出进行完所有操作后的序列。 输入格式 第一行包含两个整数…

Vue的计算属性:methods方法、computed计算属性、watch监听属性

1、methods 方法 在创建的 Vue 应用程序实例中&#xff0c;可以通过 methods 选项定义方法。应用程序实例本身会代理 methods 选项中的所有方法&#xff0c;因此可以像访问 data 数据那样来调用方法。 【实例】在 Vue 应用程序中&#xff0c;使用 methods 选项定义获取用户信…

实验16:定时器中断实验

无硬件图&#xff0c;用到D1灯 代码main.c #include<reg52.h>typedef unsigned int u16; typedef unsigned char u8;sbit LED1P2^0;void delay_10us(u16 n) {while(n--); }void delay_ms(u16 ms) {u16 i,j;for(ims;i>0;i--)for(j110;j>0;j--); }void time0_init(v…

使用命令模式实现撤销与重做功能的完整指南

使用命令模式实现撤销与重做功能的完整指南 命令模式是一种行为型设计模式&#xff0c;它将请求封装成对象&#xff0c;以便于对请求进行参数化、排队和记录。命令模式不仅有助于实现撤销和重做功能&#xff0c;还能提高系统的灵活性和可维护性。在本文中&#xff0c;我们将详…

2月公开赛Web-ssrfme

考点&#xff1a; redis未授权访问 源码&#xff1a; <?php highlight_file(__file__); function curl($url){ $ch curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_HEADER, 0);echo curl_exec($ch);curl_close($ch); }if(isset($_GET[url…

数据结构-返回n年后牛的数量

第一年农场有1只成熟的母牛A,往后的每年: 每一只成熟的母牛都会生一只母牛每一只新出生的母牛都在出生的第三年成熟每一只母牛永远不会死 返回N年后牛的数量。 抽象公式就是 F(N) F(N-1) F(N-3). 矩阵公式: |F4, F3, F2| |F3,F2,F1| * 3阶矩阵 |F5, F4, F3| |F4,F3,F2| …

innodb_buffer_pool_size在线缩小操作

一、背景 测试数据库内存32G&#xff0c;只有MySQL数据库&#xff0c;但是innodb_buffer_pool_size设置了24G&#xff0c;导致经常出现lack of memory问题、lack of swap问题。 因为使用了MySQL5.7.36版本&#xff0c;利用innodb_buffer_pool_size参数值可在线调整的新特性&…

HTTP 414错误问题

问题描述&#xff1a; 在一次前端编辑报表完成&#xff0c;打开审核人选择弹出框的时候&#xff0c;layer直接报414错误。 问题分析&#xff1a; HTTP 414是HTTP协议中的一个状态码&#xff0c;表示请求的URI&#xff08;Uniform Resource Identifier&#xff09;过长&#…

进程的创建,结束,回收基础API

1、进程的创建 #include <sys/types.h> #include <unistd.h> pid_t fork(void); 主要功能: 将当前的进程复制一份,然后这两个进程同时从本函数的下一语句开始执行;该函数会返回两次,一次返回父进程,值是子进程的PID,一次返回子进程,值固定为0;父子进程是…

JS中数组去重方法总结

在JavaScript中&#xff0c;数组去重是一个常见的操作&#xff0c;目的是移除数组中的重复元素&#xff0c;确保数组中每个元素都是唯一的。以下是几种常用的数组去重方法&#xff0c;分别适用于不同的情况&#xff1a; 1. 使用 Set 对象 Set 是 ES6 引入的新数据结构&#x…

编程之路:在Bug的迷宫中寻找出口

编程是一种艺术&#xff0c;也是一种科学。它要求我们既要有创造性的思维&#xff0c;又要有严谨的逻辑。在这条充满挑战的道路上&#xff0c;每个人都会遇到挫折&#xff0c;这些挫折可能来自于一个难以解决的Bug&#xff0c;一个复杂的算法&#xff0c;或者是在实现某个功能时…

云手机解决了TikTok哪些账号运营难题?

随着社交媒体的蓬勃发展&#xff0c;TikTok作为一款风靡全球的短视频应用&#xff0c;成为许多个人和企业进行品牌推广、内容创作的首选平台。然而&#xff0c;随之而来的是TikTok账号运营的一系列难题。本文将深入探讨云手机是如何解决这些难题的。 1、多账号运营的便捷性&…

tomcat实战演练

一.tomcat介绍 Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c; Tomcat 具有处理 HTML 页面的功能&#xff0c;它还是一个 Servlet 和 JSP容器。Tomc…

C语言笔试题(指针、数组、整数在内存中的存储、结构体......)

文章目录 1.选择题2.代码题2.1 模拟实现strncat2.2 模拟实现strncpy2.3 编写判断大小端程序2.4 模拟实现atoi2.5 BC38 变种水仙花数2.6 BC98 序列中删除指定数字 今天我们一起来看一些题目 1.选择题 解析如下&#xff1a; 正确选项&#xff1a;B A.参数错误&#xff1b;D.返回…

Prettier+Vscode setting提高前端开发效率

文章目录 前言Prettier第一步&#xff1a;下载依赖&#xff08;团队合作&#xff09;或下载插件&#xff08;独立开发&#xff09;第二步&#xff1a;添加.prettierrc.json文件**以下是我使用的****配置规则** 第三步&#xff1a;添加.prettierignore文件**以下是我常用的****配…

LabVIEW多显示器环境下主显示器识别与管理

该程序使用 LabVIEW 图形化编程语言&#xff0c;涉及多显示器环境中主显示器的识别与信息提取。图像显示了两个不同的方法来获取主显示器的信息。 第一部分&#xff1a;方法一——基于显示器位置的主显示器识别 1. 当前监视器识别&#xff1a; 使用“FP.Monitor”属性节点获取…