可变lambda, lambda使用mutable关键字
2024-09-08 08:41:34
关于lambda的捕获和调用
C++ primer上对可变lambda举的例子如下:
size_t v1=42;
auto f=[v1] () mutable{return ++v1; };
v1=0;
auto j=f(); //j 为 43
因为原则上不能改变值捕获的v1,所以要在lambda里改变v1的话,需要加上mutable关键字。
我一开始不理解为什么j为43,而不是1。说明捕获是发生在auto f=[v1] () mutable{return ++v1; };
这句。而函数体内部语句调用,是在调用f()的时候执行。
调用完f(),再输出v1的值,此时由于之前lambda是值捕获,所以v1的值没有改变是0。
size_t v1=42;
auto f=[&v1] () {return ++v1; };
v1=0;
auto j=f(); //j 为 1
如果是引用捕获,那就比较直观,因为v1是引用,所以当v1的值改变成0后,再调用f(),lambda函数体内部是0的值自加1。
归根究底,lambda加上mutable关键字后,值捕获v1,会在lambda内部生成个临时变量存储v1的值,从而每次调用进行的改变是可以累积的。如下:
size_t v1=42;
auto f=[v1] () mutable{return ++v1; };
v1=0;
auto j=f(); //j 为 43
auto k=f(); //j 为 44
最新文章
- golang-web框架revel一个表单提交的总结
- VS2013单元测试 的安装、创建与执行
- android studio增量更新
- React-redux-webpack项目总结之用到的Es6基本语法
- 16_采用SharedPreferences保存用户偏好设置参数
- 5.cadence原理图上[原创]
- iOS开发——动画编程Swift篇&;(五)CAKeyframeAnimation
- MFC逆向-消息响应函数的定位
- voa 2015 / 4 / 14
- 15:CSS3 3D
- 学c++需要先学c语言吗?
- java的移位运算详解(举例说明)
- 【Linq】常用语法汇总
- 【驱动】DM9000网卡驱动分析
- Tomcat连接参数的优化,主要是针对吞吐量做优化
- python's mutable &; immutable
- 记开发个人图书收藏清单小程序开发(九)Web开发——新增图书信息
- 提示";libc.so.6: version `GLIBC_2.14' not found";
- Python并发编程-信号量
- 转:PHP获取浏览器类型及版本号
热门文章
- Codeforces Round 573 (Div.1) 题解
- [LeetCode] 663. Equal Tree Partition 划分等价树
- github git clone ssh协议 clone超慢解决方案,提高Github Clone速度
- Visual Studio 调试系列8 查找导致程序崩溃的 DLL(使用模块窗口)
- 企业应用向ASP.NET Core迁移
- 使用Django创建RESTful API
- 【转】用VMware 8安装Ubuntu 12.04详细过程(图解)
- MySQL使用现状分析与优化
- Git更改文件名大小写,提交失败问题解决
- 2019-11-29-WPF-测试触摸设备发送触摸按下和抬起不成对