C++中为什么不要隐式捕捉this指针
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,本篇内容主要讲解"C++中为什么不要隐式捕捉this指针",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++中为什么不要隐式捕捉this指针"吧!F.54
千家信息网最后更新 2025年01月31日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安全错误
数据库的锁怎样保障安全
合肥手机软件开发定制
关于软件开发企业管理的论文
高校网络安全责任细化方案
哪些大学有学网络安全的专业
图纸管理在服务器上怎么实现
品善互联网科技有限公司
二 数据库管理系统 功能
开游戏软件开发赚钱吗
软件开发 执行标准
您的设备无法连接至验证服务器
网络技术视频
软件测试一下软件开发
网络安全成绩划分
车辆打印后显示数据库连接失败
贝斯电信软件开发
远程服务器 查看配置
网络安全等级基本保护要求
山东备用dns服务器云主机
弘讯科技工业互联网
普陀区智能软件开发批发价
ros2加载地图服务器命令
网络安全行政执法自查报告
国际数据库
软件开发简介办公
ps4游戏连接不上服务器怎么办
网络安全宣传措施
两个数据库如何共享一个表
无线传感器网络技术发展进程
合肥h3c服务器报价
服务器双网口为啥不能远程