c++ - 当 void 指针中的“this”关键字类型转换时,这些行是什么意思
问题描述
我正在使用由其他人编码的 C++ 代码。我想知道这行代码发生了什么。
tplayer
是一个数组并且OnTickContext
是一个bool
变量。
tPlayers[i].OnTickContext = (void*)this;
解决方案
这看起来像程序员不知道他在做什么,或者想看起来比他更聪明。这段代码:
tPlayers[i].OnTickContext = (void*)this;
假设OnTickContext
是一个bool
变量,则等价于:
tPlayers[i].OnTickContext = true;
这是为什么?
首先,我们将this
指向您正在检查的方法被调用的对象的指针转换为void*
. 这里没有什么太花哨的。诀窍在于将任何指针(包括void*
)分配给bool
变量。转换的行为是这样的 - 如果指针是nullptr
,则变量将设置为false
。否则,它将被设置为true
。
很明显,我们看到给bool
变量赋值可以是 yieldtrue
或者false
,那为什么我说它总是true
在这个上下文中呢?
那是因为this
指针的性质。this
指针是指向您正在调用方法的对象的指针。没有对象就不能调用方法。this
指针永远不会是.nullptr
总而言之,强制转换 ( (void*)
) 或指针的赋值都不是必需的。一些编译器甚至会警告你赋值总是会产生一个true
值。
推荐阅读
- angular - Angular Service Worker SwUpdate.available 未触发
- javascript - javascript中的数据结构,用于存储文档中更改的所有输入字段
- spring-boot - 如何下载使用google cloud shell创建的Spring Boot项目
- javascript - Fetch 不是函数
- awk - awk 从多列行中排除特定列
- ios - Xcode - 为什么“常规”下没有“嵌入式二进制文件”?
- java - 使用 ActiveDirectory 用户/通行证查找的 HTTP 基本身份验证
- oracle - 创建触发器时出现 oracle 错误 ORA-24344
- canvas - 画布覆盖图像
- entity-framework - 遵循 DDD 时使用 EF 跨多个聚合进行查询