Frage zu typeid(Typ) (Compilerabhängig?)



  • Guten Tag,

    Compiler ist der vom Visual Studio 2010 prof.

    if(typeid(signed char) == typeid(char)) {  // FALSCH
    		cout<<"typeid(signed char) == typeid(char)"<<endl;
    	}
    
    	if(typeid(long int) == typeid(long)) { // WAHR
    		cout<<"typeid(long int) == typeid(long)"<<endl;
    	}
    
    	if(typeid(signed long int) == typeid(long)) { // WAHR
    		cout<<"typeid(signed long int) == typeid(long)"<<endl;
    	}
    

    Wieso ist ein

    signed char
    

    nicht dasselbe wie ein

    char
    

    , ein

    long int
    

    hingegen wird als

    long
    

    gehandhabt.

    Warum ist das so? Hängt das vom Compiler ab? Das type_id::name nicht spezifiziert ist weiß ich



  • Nein, das ist so definiert.

    PS:
    int ist meistens impliziert. dh ein long ist nur die kurze schreibweise fuer long int. Ein int ist standardmaessig signed, also ist signed optional.

    Bei char sind aber char, signed char und unsigned char unterschiedliche Typen.

    Ist halt so 😉



  • Shade Of Mine schrieb:

    Nein, das ist so definiert.

    Aber ein signed char ist doch dasselbe wie ein char? Wieso ist das "falsch", ein signed long hingegen ist dasselbe wie ein long?

    Wo steht denn das? Ich versteh das nicht 😕



  • Kompilierer schrieb:

    Wo steht denn das? Ich versteh das nicht 😕

    Im Standard. Soll ich zitieren?

    Ob ein char jetzt vorzeichenbehaftet oder nicht ist, ist gar nicht vorgegeben. Man kann es aber bspw. beim GCC als Flag angeben 😃



  • Sone schrieb:

    Ob ein char jetzt vorzeichenbehaftet oder nicht ist, ist gar nicht vorgegeben. Man kann es aber bspw. beim GCC als Flag angeben 😃

    Tut hier nichts zur Sache.
    char ist weder unsigned char noch signed char, egal welche Flags du dem GCC mitgibst.



  • Ja ok, Shade hatte ja noch editiert während ich bereits geantwortet hatte. Gut zu wissen bzw. wieder etwas gelernt (nämlich das signed char / char / unsigned char drei verschiedene Datentypen sind)



  • Standard:

    N3337 §3.9.1 / 1 schrieb:

    Plain char, signed char, and unsigned char are three distinct types.

    Weiter heißt es:

    In any particular implementation, a plain char object can take on either the same values as a signed char or an unsigned char; which one is implementation-defined.

    Also: Es ist implementations-spezifisch, ob ein char sich verhält wie ein signed char oder ein unsigned char .

    ultrasonic schrieb:

    Sone schrieb:

    Ob ein char jetzt vorzeichenbehaftet oder nicht ist, ist gar nicht vorgegeben. Man kann es aber bspw. beim GCC als Flag angeben 😃

    Tut hier nichts zur Sache.

    Natürlich tut das was zur Sache.


Anmelden zum Antworten