web-dev-qa-db-fra.com

Quand la compilation de c ++ sans RTTI peut-elle causer des problèmes?

J'utilise l'indicateur -fno-rtti De gcc pour compiler mon C++ sans informations de type d'exécution.

En supposant que je n'utilise pas dynamic_cast<> Ou typeid(), y a-t-il quelque chose qui pourrait me conduire à des problèmes ultérieurs?

53
McPherrinM

Étant donné que votre question est spécifique à GCC, vous devez consulter attentivement la documentation de la version que vous utilisez. La documentation de GCC 4.5.2 indique ce qui suit. Ce qui d'après ma lecture indiquerait que si vous évitez dynamic_cast et typeid, vous devriez être ok. Cela dit, je n'ai aucune expérience personnelle avec -fno-rtti. Vous voudrez peut-être expliquer pourquoi vous utilisez -fno-rtti.

-fno-rtti
Désactivez la génération d'informations sur chaque classe avec des fonctions virtuelles à utiliser par les fonctionnalités d'identification du type d'exécution C++ (dynamic_cast et typeid). Si vous n'utilisez pas ces parties de la langue, vous pouvez économiser de l'espace en utilisant cet indicateur. Notez que la gestion des exceptions utilise les mêmes informations, mais elle les générera si nécessaire. Le dynamic_cast L'opérateur peut toujours être utilisé pour les conversions qui ne nécessitent pas d'informations de type d'exécution, c'est-à-dire les transformations vers void * ou à des classes de base non ambiguës.

Il y a une discussion sur la relation entre les fonctions virtuelles et RTTI disponible à Pas de RTTI mais toujours des méthodes virtuelles . La version courte est que les fonctions virtuelles devraient être bien sans RTTI.

38
Bowie Owens

Nous utilisons gcc sans rtti depuis 5 ans sans problème spécifique (sans utiliser dynamic_cast ou typeid)

5
Steve