Производительность dynamic_cast?

Перед чтением вопроса:
Этот вопрос не о том, насколько полезно использовать dynamic_cast . Дело в производительности.

Недавно я разработал дизайн, в котором часто используется dynamic_cast .
Обсуждая это с коллегами, почти все говорят, что dynamic_cast не следует использовать из-за его плохой производительности (это сотрудники, которые имеют разный опыт и в некоторых случаях не знают друг друга. Я ». м работаю в огромной компании)

Я решил проверить работоспособность этого метода вместо того, чтобы просто им поверить.

Был использован следующий код:

ptime firstValue( microsec_clock::local_time() );

ChildObject* castedObject = dynamic_cast<ChildObject*>(parentObject);

ptime secondValue( microsec_clock::local_time() );
time_duration diff = secondValue - firstValue;
std::cout << "Cast1 lasts:\t" << diff.fractional_seconds() << " microsec" << std::endl;

В приведенном выше коде используются методы из boost :: date_time в Linux для получения полезных значений.
Я сделал 3 dynamic_cast за одно выполнение, код для их измерения такой же.

Результаты 1 выполнения были следующими:
Cast1 длится: 74 мкс
Cast2 длится: 2 мкс
Cast3 длится: 1 микросекунда

Первое приведение всегда занимало 74–111 микросекунды, последующие приведения в том же исполнении занимали 1-3 микросекунды.

Итак, наконец, мои вопросы:
dynamic_cast действительно плохо работает?
По результатам тестов его нет. Мой тестовый код правильный?
Почему так много разработчиков думают, что это медленно, если это не так?

39
задан fduff 8 April 2016 в 13:23
поделиться