2

我很好奇,是:

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;
}

哪一个更“正确”并且使用安全/可靠,或者,有什么实际区别吗?

4

2 回答 2

3

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

return this->operator<(*S);

是唯一要做的事情。

于 2011-07-12T17:08:53.837 回答
1

假设你有一个错字,你的意思是比较这个:

*dynamic_cast<const State *>(s)

...对此:

*s

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

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

I would avoid the former on the grounds that anybody reading it will wonder what you are thinking.

于 2011-07-12T17:13:05.460 回答