Maison >développement back-end >C++ >Pourquoi `typeid.name()` de GCC renvoie-t-il des noms illisibles et comment puis-je y remédier ?
Particularités typeid.name() de GCC
La fonction typeid.name() est souvent utilisée pour obtenir des informations sur le type d'une variable ou une expression. Cependant, lors de la compilation avec GCC, il a été observé que cette fonction renvoie des caractères apparemment absurdes au lieu du nom de type non mutilé attendu. Ce comportement contraste avec d'autres compilateurs comme Visual C , qui fournissent une représentation plus claire.
La raison derrière l'écart
L'écart réside dans l'implémentation de typeid. name(), qui est défini par l'implémentation du compilateur. GCC, par exemple, renvoie un nom décoré, qui inclut des informations supplémentaires sur le type, telles que le nom et la signature des constructeurs et des destructeurs.
Démêlage du nom décoré
Pour obtenir un nom de type plus lisible à partir de la chaîne décorée, vous pouvez utiliser des outils tels que c filt ou __cxa_demangle. Ces outils "démanglent" le nom décoré, supprimant les informations supplémentaires et vous laissant avec le nom du type non mutilé.
Exemple : Démêlage avec c filt
#include <iostream> #include <typeinfo> using namespace std; struct Blah {}; int main() { cout << c++filt::demangle(typeid(Blah).name()) << endl; return 0; }
Quand vous compilez et exécutez ce code modifié, vous obtiendrez le résultat souhaité sortie :
struct Blah
Conclusion
Bien que la fonction typeid.name() de GCC renvoie initialement un nom de type décoré, il est possible de le démanteler pour obtenir le type non mutilé nom en utilisant des outils comme c filt ou __cxa_demangle. En comprenant la nature définie par l'implémentation de typeid.name(), vous pouvez récupérer efficacement les informations de type souhaitées dans votre code C.
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!