typeid(...).name()



  • Gibt es eine Übersicht über die Inhalte von typeid(...).name() ? Ist z.B. string immer Ss? Siehe nachfolgendes Programm:

    #include <iostream>
    #include <string>
    #include <typeinfo>
    #include <conio.h>
    using namespace std;
    
    int main()
    {
      char object0 = 'a';
      cout << "Character:   " << typeid( object0 ).name() << endl;
    
      int object1 = 5;
      cout << "Integer:     " << typeid( object1 ).name() << endl;
    
      float object2 = 2.55f;
      cout << "Float:       " << typeid( object2 ).name() << endl;
    
      double object3 = 1.44;
      cout << "Double:      " << typeid( object3 ).name() << endl;
    
      string object4 = "Hallo";
      cout << "String:      " << typeid( object4 ).name() << endl;
    
      bool object5 = true;
      cout << "Bool:        " << typeid( object5 ).name() << endl;
    
      class X { };
      cout << "class X:     " << typeid( X ).name()       << endl;
    
      class Y : public X { };
      cout << "class Y:     " << typeid( Y ).name()       << endl;
    
      getch();
    }
    

    (Output:)

    Character: c
    Integer: i
    Float: f
    Double: d
    String: Ss
    Bool: b
    class X: Z4mainE1X
    class Y: Z4mainE1Y



  • Der Inhalt ist nirgendwo festgelegt. (compilerabhängig)



  • Thx. 🙂



  • Hallo,
    typeid.name() eignet sich maximal für Debugging-Zwecke. Für alles andere ist es nutzlos. Ein Compiler könnte z.B. für alle Typen einen Leerstring liefern und wäre immer noch konform.



  • Du kannst aber auch deinen Compiler kennen und darauf eingehen und es somit doch sinnvoll einsetzen.



  • @Helium
    Entschuldige. Ich hätte wohl noch irgendwie das Wort "portabel" unterbringen müssen. Wenn man natürlich nur eine einzige Compilerversion eines einzigen Herstellers benutzt, dann kann man sich natürlich auch auf das Name-Format dieses Compilers stützen.



  • ausgefallenes Teil! warum gibt es das überhaupt?


Anmelden zum Antworten