我正在使用由他人编码的C ++代码。我想知道这段代码中发生了什么。
tplayer
是一个数组,而OnTickContext
是一个bool
变量。
tPlayers[i].OnTickContext = (void*)this;
答案 0 :(得分:6)
这看起来像程序员不知道自己在做什么,或者想要看起来比以前聪明。这段非常简短的代码:
tPlayers[i].OnTickContext = (void*)this;
假设OnTickContext
是bool
变量,等效于此:
tPlayers[i].OnTickContext = true;
那是为什么?
首先,我们将this
指针投射到void*
上,该指针指向您正在检查方法的对象。这里没什么好看的。诀窍在于将任何指针(包括void*
)分配给bool
变量。转换的行为如下-如果指针为nullptr
,则变量将设置为false
。否则,它将被设置为true
。
很明显,我们看到将指针分配给bool
可以产生true
或false
,那么为什么在这种情况下我总是说它总是true
?
那是由于this
指针的性质。 this
指针是您要在其上调用方法的对象的指针。没有对象就无法调用方法。 this
指针将从不为nullptr
。
总结起来,根本不需要强制转换((void*)
)或指针的分配。一些编译器甚至可能警告您分配将始终产生true
值。
答案 1 :(得分:-2)
程序员制作了一个类,其中他制作了OnTickContest bool变量,该变量应位于公共部分。然后,他制作了一个该类的数组,并将该bool变量的值分配给调用对象的地址(此关键字指向)。这意味着如果变量数组具有地址,则它将为1(true),否则为0(false)。