当在空指针中键入“ this”关键字时,这些行是什么意思

时间:2019-02-09 09:06:20

标签: c++ void-pointers

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

tplayer是一个数组,而OnTickContext是一个bool变量。

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

2 个答案:

答案 0 :(得分:6)

这看起来像程序员不知道自己在做什么,或者想要看起来比以前聪明。这段非常简短的代码:

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

假设OnTickContextbool变量,等效于此:

tPlayers[i].OnTickContext = true;

那是为什么?

首先,我们将this指针投射到void*上,该指针指向您正在检查方法的对象。这里没什么好看的。诀窍在于将任何指针(包括void*)分配给bool变量。转换的行为如下-如果指针为nullptr,则变量将设置为false。否则,它将被设置为true

很明显,我们看到将指针分配给bool可以产生truefalse,那么为什么在这种情况下我总是说它总是true

那是由于this指针的性质。 this指针是您要在其上调用方法的对象的指针。没有对象就无法调用方法。 this指针将从不nullptr

总结起来,根本不需要强制转换((void*))或指针的分配。一些编译器甚至可能警告您分配将始终产生true值。

答案 1 :(得分:-2)

程序员制作了一个类,其中他制作了OnTickContest bool变量,该变量应位于公共部分。然后,他制作了一个该类的数组,并将该bool变量的值分配给调用对象的地址(此关键字指向)。这意味着如果变量数组具有地址,则它将为1(true),否则为0(false)。