Когда компиляция c ++ без RTTI может вызвать проблемы? - PullRequest
52 голосов
/ 20 декабря 2010

Я использую флаг gcc -fno-rtti для компиляции моего C ++ без информации о типе среды выполнения.

Если я не использую dynamic_cast<> или typeid(), есть ли что-нибудь, что может привести меня к более поздним проблемам?

Ответы [ 2 ]

38 голосов
/ 20 декабря 2010

Поскольку ваш вопрос относится к GCC, вам следует внимательно ознакомиться с документацией к используемой вами версии.Документация для GCC 4.5.2 гласит следующее.Который из моего чтения будет означать, что если вы избегаете dynamic_cast и typeid, у вас должно быть все в порядке.Тем не менее, у меня нет личного опыта с -fno-rtti.Возможно, вы захотите уточнить, почему вы используете -fno-rtti.

-fno-rtti
Отключить генерацию информации о каждом классе с виртуальными функциями для использования при идентификации типа среды выполнения C ++особенности (dynamic_cast и typeid).Если вы не используете эти части языка, вы можете сэкономить место с помощью этого флага.Обратите внимание, что для обработки исключений используется та же информация, но она будет генерировать ее по мере необходимости.Оператор dynamic_cast все еще может использоваться для приведений, которые не требуют информации о типе времени выполнения, то есть приведений к void * или к однозначным базовым классам.

5 голосов
/ 09 февраля 2011

Мы использовали gcc без rtti в течение 5 лет без особых проблем (без использования dynamic_cast или typeid)

...