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 charnicht dasselbe wie ein
char, ein
long inthingegen wird als
longgehandhabt.
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
charsich verhält wie einsigned charoder einunsigned 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.