Приведение указателя в C++ при передаче указателя в качестве параметра для ссылки
Мне любопытно, это:
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 ответа
Нет, первый бросает указатель на себя, который ничего не делает, а затем вызывает const State*
перегрузка, что приводит к бесконечному циклу. Вам не нужно dynamic_cast
до тех пор, пока вам не нужно выполнить downcast во время выполнения - здесь нет downcasting, так что
return this->operator<(*S);
это единственное, что нужно сделать.
Предполагая, что у вас есть опечатка, и вы хотите сравнить это:
*dynamic_cast<const State *>(s)
...к этому:
*s
... где s имеет тип времени компиляции const State *
Нет никакой разницы.
Возможно, что первые могут быть немного медленнее, если ваш компилятор не заметит, что они эквивалентны времени компиляции.
Я бы избегал первого на том основании, что любой, кто его читает, будет удивляться тому, что вы думаете.