типы — Каковы недостатки dynamic_cast в C ++?

Несмотря на то, что dynamic_cast возвращает 0 если обрабатываемый указатель имеет несовместимый тип, почему бы вам не использовать dynamic_cast?

0

Решение

Требуется ненулевое время выполнения. Это об этом. C-броски и их встречные части c ++, такие как: reinterpret или же static 0-накладные расходы, потому что они выполняются во время компиляции.

Ну, для некоторых, важной частью может быть то, что им нужно RTTI, что также вносит некоторые накладные расходы, например, в размер кода, потому что компилятор должен включать информацию о типе в двоичный файл, что обычно не делается. Следует отметить, что это может быть нестандартной опцией в компиляторах.

Также актуальное примечание из вики: «В первоначальном проекте C ++ Бьярн Страуструп не включал информацию о типах во время выполнения, потому что считал, что этот механизм часто используется не по назначению.«

РЕДАКТИРОВАТЬ: Следуя цитате и комментариям. Я не уверен, если это действительно недостаток, я хотел бы отметить, что когда вы используете его, вы должны подумать, действительно ли вам это нужно.

Кому-то это просто не нравится, кому-то это не нравится.

6

Другие решения

Время выполнения накладных расходов:

  • Для хранения RTTI требуется больше памяти (см. ссылка на сайт).
  • Типы должны быть проверены во время выполнения.

Вопросы дизайна:

  • Вовлеченные типы должны быть полиморфными.
  • Часто это признак того, что что-то не так в вашем коде; зачем вам проверять?
2

По вопросам рекламы [email protected]