【问题标题】:IEntity* wLocalEntity pointer example code snipetIDEntity* 本地实体指针示例代码片段
【发布时间】:2022-01-13 18:30:09
【问题描述】:

这段 C++ 代码 sn-p 做了什么?

IEntity* wLocalEntity= const_cast<IEntity*>(BaseSimSystem::getEntityRef());
if(wLocalEntity!=0){
    mEntitySpeed=wLocalEntity->getSpeed();
}

我不确定它与模板创建有何关系。有人可以向我解释这段代码的作用吗? 谢谢。

【问题讨论】:

  • const_char 应该是什么?那应该是const_cast
  • 我怀疑这个问题有错别字。除了const_chargetSpeed() 似乎还缺少一个;
  • if(wLocalEntity!=0) 更好的措辞是if(wLocalEntity!=nullptr) 以使每个人的意图都非常明显,或者if(wLocalEntity) 被经验丰富的程序员视为如果有wLocalEntity 将指针与数字进行比较...这只是糟糕的代码。
  • 是的,我的意思是 const_cast
  • 这段代码很多解释不了。需要这些类型和函数的定义,我们看不到。是否以任何方式涉及模板也是如此。

标签: c++ pointers templates


【解决方案1】:

这是代码。

IEntity* wLocalEntity= const_cast<IEntity*>(BaseSimSystem::getEntityRef());
if(wLocalEntity!=0){
    mEntitySpeed=wLocalEntity->getSpeed();
}

如果你真的被问及这段代码,我要做的第一件事就是抱怨 if 子句。那 0 应该是 nullptr :

if (wLocalEntity != nullptr) {
    mEntitySpeed = wLocalEntity->getSpeed();
}

另外,请告诉我你知道你不应该把你的代码压缩得这么紧。当您将所有这些运算符推到一起而没有空格时,错误就会隐藏。

现在,让我们看看第 1 行:

IEntity* wLocalEntity = const_cast<IEntity*>(BaseSimSystem::getEntityRef());

显然,wLocalEntity 是一个指向 IEntity 的指针。我希望你明白这一点。

const_cast&lt;&gt; 位很荒谬,可能是一个错误。我们不知道 BaseSimSystem::getEntityRef() 返回什么,但我怀疑它返回一个 const 指针,现在您正试图将它分配回一个非常量变量。 const_cast 正在摆脱 const 性。

几乎可以肯定正确的代码是:

const IEntity * wLocalEntity = BaseSimSystem::getEntityRef();

但是,IEntity 可能具有并非真正应该使用的标志 const 的方法,因此您可能必须这样做,因为其他一些程序员在应该使用 const 时却没有应用。

所以const_cast&lt;IEntity *&gt; 说“取括号中的返回值,是的,我知道它们不是非常量 IEntity *,但不要警告我,因为据说我知道我在做什么.

怎么样?

【讨论】:

  • 感谢这些解释,这是最佳答案
猜你喜欢
  • 2013-12-28
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 2020-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多