Maison >développement back-end >C++ >Pourquoi `typeid.name()` produit-il une sortie différente dans GCC et comment puis-je la démanteler ?
Comportement de Typeid.name() dans GCC et techniques de démantelage
Lors de l'utilisation de l'opérateur typeid, les développeurs rencontrent des différences dans la sortie de typeid. name() selon le compilateur utilisé. Cet article explique pourquoi cela se produit dans GCC et comment résoudre le problème d'impression des noms de types non mutilés.
GCC vs Visual C : affichage du nom de type
Dans l'exemple fourni, GCC (version 4.4.4) renvoie « 4Blah » lors de l'appel de typeid(Blah).name(), tandis que Visual C 2008 affiche « struct Blah ». Cet écart est dû au retour par GCC d'un nom de type décoré.
Les noms de types décorés de GCC
Les implémentations de l'opérateur typeid ne sont pas définies de manière uniforme. Dans le cas de GCC, il renvoie un nom de type décoré, qui inclut des informations supplémentaires telles que la taille et l'alignement du type. tapez le nom, les utilisateurs doivent démanteler le nom décoré. Cela peut être accompli à l'aide de divers outils :
Commande c filt :
Un utilitaire de ligne de commande qui démêle les noms décorés.Cette commande affichera "struct Blah" comme nom du type démêlé. L'intégration de la fonction __cxa_demangle() dans votre code est également une option pour démanteler par programme les noms décorés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!