首页 > 解决方案 > 当 void 指针中的“this”关键字类型转换时,这些行是什么意思

问题描述

我正在使用由其他人编码的 C++ 代码。我想知道这行代码发生了什么。

tplayer是一个数组并且OnTickContext是一个bool变量。

 tPlayers[i].OnTickContext = (void*)this;

标签: c++void-pointers

解决方案


这看起来像程序员不知道他在做什么,或者想看起来比他更聪明。这段代码:

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值。


推荐阅读