C++中为什么不要隐式捕捉this指针
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,本篇内容主要讲解"C++中为什么不要隐式捕捉this指针",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++中为什么不要隐式捕捉this指针"吧!F.54
千家信息网最后更新 2025年12月03日C++中为什么不要隐式捕捉this指针
本篇内容主要讲解"C++中为什么不要隐式捕捉this指针",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++中为什么不要隐式捕捉this指针"吧!
F.54:如果需要捕捉this指针,明确地捕捉所有变量(不要使用隐式捕捉)。
译者注:隐式捕捉是指在捕捉列表中忽略变量名,只是依靠使用和lamda表达式外的变量同样的名称来实现的捕捉。例如否面示例代码中的:
auto lambda = [=]{ use(i, x); };Reason(原因)
这种做法难于理解。在成员函数中的捕捉列表[=]看起来是值捕捉,但是由于实际以值方式捕捉了不可见的this指针,因而实际上是通过引用方式捕捉数据成员。如果你就是想这样做,明确地将this写入捕捉列表。
Example(示例)
class My_class { int x = 0; // ... void f() { int i = 0; // ... auto lambda = [=]{ use(i, x); }; // BAD: "looks like" copy/value capture // [&] has identical semantics and copies the this pointer under the current rules // [=,this] and [&,this] are not much better, and confusing x = 42; lambda(); // calls use(0, 42); x = 43; lambda(); // calls use(0, 43); // ... auto lambda2 = [i, this]{ use(i, x); }; // ok, most explicit and least confusing // ... }};Note(注意)
这是一个在标准化过程中不太活跃的议题,可能在被将来版本的标准以增加一种新的捕捉方法或者修改[=]含义的方式解决。目前,只要明确就好。
Enforcement(实施建议)
如果任何lambda表达式的捕捉列表被定义为隐式捕捉并同时捕捉this(无论是明确地还是通过默认捕捉)指针,进行提示。
到此,相信大家对"C++中为什么不要隐式捕捉this指针"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
指针
C++
变量
实际
方式
内容
成员
方法
标准
示例
表达式
学习
实用
更深
代码
做法
兴趣
函数
原因
只是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全方面最大
风依网络技术官方账号是做什么的
软件开发过程的阶段用时
档案系统软件开发意见建议
软件开发一般考哪些证书
centos 7数据库
vba中创建数据库
申请网络安全专项经费
php加数据库留言板
网络安全保密故事
是涉及网络安全的规范性文件
天龙3d为什么没有服务器
吉林双锋网络技术有限公司
幻剑江湖服务器c26维护
我的世界网易服务器斗罗大陆生存
进scum服务器连接超时
马鞍山智能化浪潮服务器
ftp服务器转移
奉贤区方便软件开发包括什么
外国数据库
浅谈计算机网络安全毕业论文
游戏服务器被攻击如何防御
网络安全示范单位计划
网络安全黑板报涂鸦泡泡
数据库映射多个ip
服务器映射和原地址转换的区别
如何在jsp中导入数据库
网络安全法学习反思教师
北京电子科技大学网络安全
加强网络安全建设的路径