Heim > Backend-Entwicklung > C++ > Hauptteil

Warum gibt „typeid.name()' von GCC verstümmelte Namen anstelle einfacher Typnamen zurück?

Mary-Kate Olsen
Freigeben: 2024-11-22 11:50:12
Original
734 Leute haben es durchsucht

Why Does GCC's `typeid.name()` Return Mangled Names Instead of Plain Type Names?

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;
}
Nach dem Login kopieren

Das Kompilieren dieses Codes mit GCC 4.4.4 führt zu Verwirrung Ergebnis:

4Blah
Nach dem Login kopieren

Im Gegensatz dazu hätte Visual C 2008 zurückgegeben:

struct Blah
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage