将指针作为参数传递给引用时的C ++指针转换

时间:2011-07-12 17:04:03

标签: c++ pointers dynamic-cast

我很好奇,是:

bool State::operator<(const State* S)
{
  return this->operator<(*dynamic_cast<const State *>(S));
}

完全相同:

bool State::operator<(const State* S)
{
  return this->operator<(*(S));
}

作为参考,被调用的this->operator<是:

bool State::operator<(const State& S)
{
  return this->reward < S.reward ? true : false;
}

哪一个更“正确”并且使用类型安全/可靠,或者是否有任何实际差异?

2 个答案:

答案 0 :(得分:3)

不,第一个将指针强制转换为自身,它实际上没有做任何事情,然后调用const State*重载,这会导致无限循环。在运行时需要向下转换之前,您不需要dynamic_cast - 这里没有向下转换,所以

return this->operator<(*S);

是唯一要做的事情。

答案 1 :(得分:1)

假设你有拼写错误,你想比较一下:

*dynamic_cast<const State *>(s)

......对此:

*s

...其中s具有编译时类型const State *,根本没有区别。

可以想象,如果编译器没有注意到它们是编译时等效的,那么前者可能会稍慢一些。

我会避免前者,因为任何阅读它的人都会想知道你在想什么。