可变lambda, lambda使用mutable关键字
2019-10-12 08:09:47来源:博客园 阅读 ()
可变lambda, lambda使用mutable关键字
关于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
原文链接:https://www.cnblogs.com/HaoPengZhang/p/11649391.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++ 在名称空间中使用using声明和using编译指令 2020-05-29
- 1.ffmpeg、ffplay、ffprobe命令使用 2020-05-11
- 关于使用ffmpeg的一些牢骚 2020-05-08
- G++编译链接的那些事!G++的特殊使用方法[常用] 2020-04-19
- c/c++ 使用valgrind检查内存泄漏 2020-04-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash