In der C-Programmierung werden char, signiertes Zeichen und unsigniertes Zeichen als unterschiedliche Datentypen betrachtet . Dieses Verhalten unterscheidet sich von Ganzzahlen, bei denen „int“ und „signed int“ vom gleichen Typ sind und „unsigned int“ ein anderer separater Typ ist.
Frage:
Warum ist das so? Der folgende Code wird für char-Typen anders kompiliert als für int-Typen?
cout << getIsTrue< isX<int8>::ikIsX >() << endl; cout << getIsTrue< isX<uint8>::ikIsX >() << endl; cout << getIsTrue< isX<char>::ikIsX >() << endl;
Antwort:
C unterscheidet zwischen char, signiertem char und unsigniertem char als drei separate Typen. Aus diesem Grund sind die Vorlageninstanziierungen für char, int8 und uint8 unterschiedlich.
Bei Ganzzahlen sind int und signiertes int jedoch vom gleichen Typ, während unsigned int ein anderer Typ ist. Aus diesem Grund führen die Vorlageninstanziierungen für int, int32 und uint32 nur zu zwei eindeutigen Vorlagen.
Der Standard [basic.fundamental](https://eel.is/c draft/basic.fundamental) besagt :
„Plain char“, „signed char“ und „unsigned char“ sind drei verschiedene Typen.“
Das bedeutet, dass sie unterschiedliche Objektdarstellungen haben und je nach Implementierung unterschiedliche Wertebereiche haben können.
Das obige ist der detaillierte Inhalt vonWarum werden „char', „signed char' und „unsigned char' in C anders behandelt als „int', „signed int' und „unsigned int'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!