Heim >Backend-Entwicklung >C++ >Warum erzeugt „typeid.name()' in GCC eine unterschiedliche Ausgabe und wie kann ich sie entzerren?
Typeid.name() Verhalten in GCC und Demangling-Techniken
Bei der Verwendung des Typeid-Operators stoßen Entwickler auf Unterschiede in der Ausgabe von Typeid. name() abhängig vom verwendeten Compiler. In diesem Artikel wird untersucht, warum dies in GCC auftritt und wie das Problem beim Drucken unverschlüsselter Typnamen behoben werden kann.
GCC vs. Visual C: Typnamenanzeige
Im Beispiel Vorausgesetzt, GCC (Version 4.4.4) gibt beim Aufruf von typeid(Blah).name() „4Blah“ zurück, während Visual C 2008 „struct Blah“ anzeigt. Diese Diskrepanz ist auf die Rückgabe eines dekorierten Typnamens durch GCC zurückzuführen.
Dekorierte Typnamen von GCC
Implementierungen des Typeid-Operators sind nicht einheitlich definiert. Im Fall von GCC wird ein dekorierter Typname zurückgegeben, der zusätzliche Informationen wie die Größe und Ausrichtung des Typs enthält.
Dekorierte Namen entzerren
Zum Abrufen der entzerrten Geben Sie einen Namen ein, Benutzer müssen den dekorierten Namen entwirren. Dies kann mit verschiedenen Tools erreicht werden:
Entflechtung anwenden
In GCC kann der folgende Befehl ausgeführt werden, um den dekorierten Namen „4Blah“ zu entflechten:
g++ -fno-rtti -no-pie -o main main.cpp ./main | c++filt
Dieser Befehl gibt „struct Blah“ als entzerrten Typnamen aus. Die Integration der Funktion __cxa_demangle() in Ihren Code ist auch eine Option zum programmgesteuerten Entwirren von dekorierten Namen.
Das obige ist der detaillierte Inhalt vonWarum erzeugt „typeid.name()' in GCC eine unterschiedliche Ausgabe und wie kann ich sie entzerren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!