Во-первых, вам нужно измерить производительность гораздо больше, чем всего за несколько итераций, так как ваши результаты будут зависеть от разрешения таймера. Попробуйте, например, 1 миллион +, чтобы создать репрезентативную картину. Кроме того, этот результат не имеет смысла, если вы не сравниваете его с чем-то, то есть делаете эквивалент, но без динамического приведения.
Во-вторых, вам нужно убедиться, что компилятор не дает ложных результатов, оптимизируя несколько динамических приведений к одному и тому же указателю (поэтому используйте цикл, но каждый раз используйте другой указатель ввода).
Динамическое приведение будет медленнее, потому что оно должно получить доступ к таблице RTTI (информация о типе времени выполнения) для объекта и проверить, является ли приведение действительным. Затем, чтобы правильно его использовать, вам нужно будет добавить код обработки ошибок, который проверяет, равен ли возвращаемый указатель NULL
. Все это занимает циклы.
Я знаю, что вы не хотели говорить об этом, но "дизайн, в котором часто используется dynamic_cast", вероятно, является индикатором того, что вы делаете что-то не так ...