我很好奇,是:
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;
}
哪一个更“正确”并且使用类型安全/可靠,或者是否有任何实际差异?
答案 0 :(得分:3)
不,第一个将指针强制转换为自身,它实际上没有做任何事情,然后调用const State*
重载,这会导致无限循环。在运行时需要向下转换之前,您不需要dynamic_cast
- 这里没有向下转换,所以
return this->operator<(*S);
是唯一要做的事情。
答案 1 :(得分:1)
假设你有拼写错误,你想比较一下:
*dynamic_cast<const State *>(s)
......对此:
*s
...其中s具有编译时类型const State *
,根本没有区别。
可以想象,如果编译器没有注意到它们是编译时等效的,那么前者可能会稍慢一些。
我会避免前者,因为任何阅读它的人都会想知道你在想什么。