C++中为什么不要隐式捕捉this指针
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容主要讲解"C++中为什么不要隐式捕捉this指针",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++中为什么不要隐式捕捉this指针"吧!F.54
千家信息网最后更新 2026年11月02日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安全错误
数据库的锁怎样保障安全
互联网络科技
什么是科技互联网
中智农互联网科技
广州大一互联网络科技有限公司
北京路客互联网科技有限公司
互联网科技工作委员会副主任毛军
科技互联网产品
深圳恒合互联网络科技有限公司
丰台科技园 互联网
无线互联网科技
互联网金融 科技创新
狮子座互联网科技培训
互联网巨头投资的硬核科技
青海省互联网新科技
南山科技园互联网公司有哪些
科技互联网大厂
国大互联网教育科技有限公司工作
21世纪互联网科技成就
陕西九四连强互联网科技有限公司
互联网企业和网络科技有限公司
重生之互联网科技帝国
中正互联网科技招聘
顺网科技2021年互联网排名
北京三清互联网科技
互联网科技产品
江阴互联网智能科技产品进口
互联网科技和法律行业
锡山区互联网智能科技产品供应
厦门江牛科技互联网
好易买互联网科技