Réponse juste à la mise à jour:
N'exception de la manipulation vraiment besoin
RTTI pour être activé
Gestion des exceptions en a réellement besoin de quelque chose de plus puissant que RTTI et de la dynamique de fonte dans un sens. Considérons le code suivant:
try {
some_function_in_another_TU();
} catch (const int &i) {
} catch (const std::logic_error &e) {}
Ainsi, lorsque la fonction dans l'autre TU le jette, il va avoir l'air de la pile (cochez tous les niveaux immédiatement, ou de vérifier un niveau à un moment pendant le déroulement de pile, jusqu'à la mise en œuvre) pour une clause catch qui correspond à l'objet en cours de levée.
Pour effectuer ce match, il pourrait ne pas l'aspect de RTTI qui stocke le type de chaque objet, puisque le type de la levée d'une exception est la statique type de le jeter expression. Mais il ne faut comparer les types dans un instanceof
, et il doit le faire au moment de l'exécution, parce qu' some_function_in_another_TU
pourrait être appelée à partir de n'importe où, avec n'importe quel type de catch sur la pile. Contrairement aux dynamic_cast
, il doit procéder à cette exécution instanceof vérifier sur des types qui n'ont pas de virtuel fonctions de membre, ainsi que les types qui ne sont pas des types de classe. Cette dernière partie n'est pas ajouter de la difficulté, parce que les types de classe ont pas de hiérarchie, et donc tout ce qui est nécessaire est de l'égalité de traitement, mais vous avez encore besoin de saisir les identifiants qui peut être comparé à l'exécution.
Donc, si vous activez les exceptions alors vous avez besoin de la partie de RTTI qui n'type de comparaisons, comme dynamic_cast
's type de comparaisons, mais couvrant plus de types. Vous n'avez pas nécessairement besoin de la partie de RTTI qui stocke les données utilisées pour effectuer cette comparaison dans chaque classe de la vtable, où il est accessible à partir de l'objet-données pourrait seulement être encodée au point de jeter l'expression et chaque clause catch. Mais je doute que c'est une économie importante, puisqu' typeid
objets ne sont pas exactement énorme, ils contiennent un nom qui est souvent nécessaire de toute façon dans la table des symboles, en plus de certains de la mise en œuvre de données défini pour décrire le type de hiérarchie. Alors, probablement, vous pourriez aussi bien avoir tous RTTI par ce point.