lambda表达式浅析【C++学习笔记】

lambda表达式浅析【C++学习笔记】

基本用法:

auto f = [/*捕获列表*/](/*参数*/)->int /*后置返回值类型*/{/** 函数体*/};

捕获列表:

  • [] : 不捕获任何变量

  • [变量名] : 表示值捕获,不可修改

  • [=] :按值捕获所有变量,不可修改

  • [&] : 按引用捕获可以修改

  • [this] : 在类中捕获,捕获当前类的this指针,如果使用 = & 捕获,则默认捕获this指针

  • [& 变量名] :按引用捕获该变量

  • [ = , & 变量名] ; 按值捕获所有变量,但是按引用捕获变量名变量,按引用捕获的变量,每个前面都有写一个&

  • [ &,变量名] : 按引用捕获所有变量,但是按值捕获变量名变量

lambda表达式延迟调用易错点

int a = 12;auto f = [=]() ->int {return a;};a = 99;cout << f() << endl;

输出:

image-20211102201025117

为什么输出不是99呢?

因为在遇到auto f = [=]() ->int这一行时,a的值就已经被复制到lambda表达式中了

要避免这个错误可以使用按引用捕获

lambda表达式类型

lambda表达式是闭包类型,可以理解成函数中的函数

编译器会为每个lambda表达式生成一个类,和一个可调用类对象

lambda表达式用法介绍

vector<int> vec{ 12,23,435,56,76 };int isnums = 9;for_each(vec.begin(), vec.end(), [=](int& val){val -= isnums;});for (auto value : vec){cout << value << endl;}

广义lambda捕获

解决lambda捕获依赖于类对象问题

将m_object复制到闭包里面来

[ temp = m_object]()
{return temp;};

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

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

相关文章

【Cocos2d-x for WP8 学习整理】(2)Cocos2d-Html5 游戏 《Fruit Attack》 WP8移植版 开源...

【Cocos2d-x for WP8 学习整理】&#xff08;2&#xff09;Cocos2d-Html5 游戏 《Fruit Attack》 WP8移植版 开源 原文:【Cocos2d-x for WP8 学习整理】&#xff08;2&#xff09;Cocos2d-Html5 游戏 《Fruit Attack》 WP8移植版 开源这一阵花了些时间&#xff0c;把 cocos2d-h…

react学习(64)--简单的锚点封装

render() {const {anchors [], //锚点数组&#xff0c;link-节点id&#xff0c;title-显示文字content, //左侧内容} this.props;return (<div style{{ display: flex }}><div style{{ flex: 9, overflow: hidden }}>{content || this.props.children}</div&g…

碰撞,处理碰撞,发射 Learn Unreal Engine (with C++)

本文使用打砖块游戏举例 碰撞,处理碰撞 碰撞就相当于一个Actor进入另一个Box中,用这个思路就可以处理碰撞了 OnComponentBeginOverlap 当某些内容开始重叠此组件时调用的事件&#xff0c;例如玩家进入触发器。 **委托 事件 **1 AddDynamic( UserObject, FuncName ) 用于…

在Solaris系统下如何更改网络配置?

修改/etc/hostname.qfe0 >附檔名,依照網卡種類不同,有不同的名稱再依照上述檔案內容,再去查看/etc/hosts中相對應的名稱,並修改IP转载于:https://blog.51cto.com/youjianhello/12461

react学习(65)--ant design加载中

import { Spin } from antd;ReactDOM.render(<Spin />, mountNode);

传送,条件加速 Learn Unreal Engine (with C++)

本文以吃豆人游戏为例UE4项目: 自制UE4 小游戏 (gitee.com) 传送 pawn进入box触发OnActorBeginOverlap获取目标位置,下一帧将pawn坐标更改为目标位置 首先需要重叠函数与开始重叠事件绑定 OnActorBeginOverlap.AddDynamic(this, &ATeleporterActor::OnOverlapBegin);头文件…

ADSL路由器的设置

关于将ADSL 路由器的设置&#xff0c;其实ADSL 路由器的设置并不是很难&#xff0c;以TL-R4XX系列路由器为例&#xff0c;简要说明ADSL 路由器的设置&#xff0c;首先MODEM、路由器、电脑连结起来&#xff0c;网络必需畅通&#xff0c;ADSL 路由器地址出厂默认IP地址&#xff1…

web.xml中 Log4jConfigListener配置

使用Log4jConfigListener有如如下好处&#xff1a; 1. 动态的改变记录级别和策略&#xff0c;不需要重启Web应用&#xff0c;如《Effective Enterprise Java》所说。 2. 把log文件定在 /WEB-INF/logs/ 而不需要写绝对路径。 因为 系统把web目录的路径压入一个叫webapp.ro…

获取摄像机,摄像机切换Learn Unreal Engine (with C++)

摄像机应该是使用最普遍的组件了 获取摄像机,摄像机切换 新建C类(以CameraActor为父类) 将摄像机在地图中放置 头文件声明 virtual void BeginPlay() override;UPROPERTY(EditAnywhere, BlueprintReadWrite)UBoxComponent* OverlapVolume; // 盒体组件,用于检测人物碰撞UPR…

BIOS详情设置续一

高级芯片组特征Configure DRAM Timing&#xff08;设置内存时钟&#xff09;  此设置决定DRAM 的时钟设置是否由读取内存模组上的SPD&#xff08;Serial PresenceDetect&#xff09;EPROM 内容决定。设置为By SPD允许内存时钟根据SPD的设置由BIOS自动决定配置&#xff1b;设置…

android报错及解决1--Bitmap加载时,报bitmap size exceeds VM budget

报错描述&#xff1a; 用Bitmap加载图片资源时&#xff0c;报错java.lang.OutOfMemoryError: bitmap size exceeds VM budget 原因分析&#xff1a; android系统限制&#xff0c;只给图片分配8M内存&#xff0c;超过就蹦。图片虽然几十K&#xff0c;可能是压缩格式&#xff0c;…

react学习(67)--git 屏蔽文件不被追踪

bash # 屏蔽文件不被 git 追踪 git update-index --assume-unchanged [FILE]# 如果要还原的话&#xff0c;使用命令&#xff1a; git update-index --no-assume-unchanged [FILE]

华三1822-24路由交换机配置例子

华三1822-24路由交换机配置例子#sysname Quidway#super password level 3 cipher xxxxxxx#FTP server enable#web set-package force flash:/http.zip#radius scheme system#domain system #local-user dgbg_adminpassword cipher xxxxxxxservice-type telnet terminal#dhcp se…

什么是 AJAX, what is AJAX(一)

AJAX全稱為「Asynchronous JavaScript and XML」&#xff08;非同步JavaScript和XML&#xff09;&#xff0c;是一種創建互動式網頁應用的網頁開發技術。它使用&#xff1a; 使用XHTMLCSS來表示信息&#xff1b; 使用JavaScript操作DOM Document Object Model進行動態顯示及交互…

主角的创建与选择 Learn Unreal Engine (with C++)

主角创建有两种方式,本教程以SpaceshipBattle fanxingin/UE4项目 - 码云 - 开源中国 (gitee.com) 1. 新建游戏模式方式 新建一个蓝图类,选择游戏模式基础 在蓝图类的细节中将默认pawn类选择主角的蓝图类 在项目设置->地图和模式->默认模式->默认游戏模式 默认游…

单例模式的两种方法

public class MySingleton { private static object myLock new object(); private static volatile MySingleton mySingleton null; private MySingleton() { } public static MySingleton GetInstance() { if (mySingleton null) { //第一次检查 lock (myLock) { if (mySi…

SQL View 的使用语法与原则

1.View只是存储下来的sql 语句Views are nothing but saved SQL statements, and are sometimes referred as “Virtual Tables”. Keep in mind that Views cannot store data (except for Indexed Views); rather they only refer to data present in tables.2.create a vie…

What is AJAX?(转)(二)

关键词&#xff1a; ajax Asynchronous JavaScript Xml 目录 什么是AJAX&#xff1f; 第一步&#xff1a;如何发出一个HTTP请求 第二步&#xff1a;处理服务器的响应 第三步&#xff1a;一个简单的例子 第四步&#xf…

react学习(68)--ant design inputNumber

<InputNumber min{0} style{{ width: 100 }} onPressEnter{this.handleSearch} />