GCCs verstümmelte Typnamen: Entmystifizierung des „typeid.name()“-Rätsels
Bei Verwendung der Funktion „typeid.name()“. Bei GCC werden Benutzer möglicherweise von den seltsamen Zeichenfolgen überrascht sein, die zurückgegeben werden. Im Gegensatz zu anderen Compilern, die entschlüsselte Klassen- oder Strukturnamen bereitstellen, gibt GCC einen dekorierten Namen voller potenzieller Verwirrung aus.
Einblick in das Problem
Bedenken Sie den folgenden C-Code:
#include <iostream> #include <typeinfo> using namespace std; struct Blah {}; int main() { cout << typeid(Blah).name() << endl; return 0; }
Das Kompilieren dieses Codes mit GCC 4.4.4 führt zu Verwirrung Ergebnis:
4Blah
Im Gegensatz dazu hätte Visual C 2008 zurückgegeben:
struct Blah
Enthüllung des Geheimnisses
Der Grund für diese Diskrepanz liegt in der durch die Implementierung definierten Natur von „typeid.name()“. Eine Implementierung kann sich dafür entscheiden, unterschiedliche Zeichenfolgen für verschiedene Typen oder sogar identische Zeichenfolgen für verschiedene Typen zurückzugeben.
GCCs dekorierte Namen
GCC gibt von Natur aus einen dekorierten Namen für zurück Typinformationen. Dieser dekorierte Name ist eine komplexe Zeichenfolge, die verschiedene Details über den Typ enthält, einschließlich seines Namens und der zugehörigen Vorlagenargumente.
Den dekorierten Namen entschlüsseln
Um GCCs zu verstehen Für dekorierte Namen kann man den Befehl „c filt“ oder die Funktion „__cxa_demangle“ verwenden. Diese Tools ermöglichen das Entwirren von dekorierten Namen und offenbaren den zugrunde liegenden entwirrten Klassen- oder Strukturnamen.
Fazit
Das Verhalten von „typeid.name()“ kann zwar variieren Bei allen Compilern ist es wichtig, die durch die Implementierung definierte Natur ihrer Rückgabe zu erkennen. Im Fall von GCC werden dekorierte Namen zurückgegeben, deren Entschlüsselung zur besseren Lesbarkeit spezielle Tools erfordert.
Das obige ist der detaillierte Inhalt vonWarum gibt „typeid.name()' von GCC verstümmelte Namen anstelle einfacher Typnamen zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!