Используется ли RTTI (информация о типе времени выполнения) при статическом приведении? - PullRequest
0 голосов
/ 13 сентября 2011

В концепции ООП RTTI (информация о типе времени выполнения) также используется для статического приведения или только для динамического приведения?

Если это характерно для динамического приведения, то обоснуйте свой ответ, а такжепожалуйста, объясните, почему нет RTTI для static_casting.

Какой смысл использовать RTTI для downcasting?

Ответы [ 3 ]

3 голосов
/ 13 сентября 2011

Статическое приведение является конструкцией во время компиляции, тогда как RTTI является явлением во время выполнения.Это означает, что нет, RTTI не используется для static_cast.

. Я предлагаю вам прочитать эту ветку , поскольку в ней много полезной информации.

0 голосов
/ 13 сентября 2011

Вот хитрость, если у вас есть некоторые классы, такие как A, B, C, D, E, и у них есть общий базовый класс Base, тогда понижающий класс от Base должен выбрать правильный класс.Приведение работает только в том случае, если исходный объект был создан для того же класса.В примере с 5 производными классами и одним базовым классом есть шанс 1: 5 сделать это правильно.Что не очень хорошо, и программисты часто выбирают это неправильно.static_cast не может обнаружить проблему вообще, и неправильный выбор типа в static_cast приводит к сбоям.dynamic_cast может обнаружить его, но только во время выполнения, т. е. dynamic_cast также может завершиться с ошибкой и вернуть NULL или выдать исключение.RTTI необходим для того, чтобы dynamic_cast мог правильно работать.

0 голосов
/ 13 сентября 2011

static_cast не выполняет проверку во время выполнения, поэтому, по-видимому, он не требует наличия RTTI.(Конечно, это зависит от реализации.)

dynamic_cast выполняет проверку во время выполнения (и, следовательно, требует некоторой формы RTTI под капотом), которая даету вас есть шанс разобраться с неверным составом персонажей!

...