Zeichentypen in C: Eindeutig oder gleichwertig?
In C kann sich das Verhalten von Zeichentypen (char) manchmal von dem von unterscheiden vorzeichenbehaftete und vorzeichenlose Ganzzahlen, was zu Verwirrung führt. Konkret veranschaulicht der folgende Code diesen Unterschied:
<code class="cpp">#include <iostream> typedef signed char int8; typedef unsigned char uint8; struct TrueType {}; struct FalseType {}; template <typename T> struct isX { typedef typename T::ikIsX ikIsX; }; template <> struct isX<char > { typedef FalseType ikIsX; }; template <> struct isX<int8 > { typedef FalseType ikIsX; }; template <> struct isX<uint8 > { typedef FalseType ikIsX; }; template <typename T> bool getIsTrue(); template <> bool getIsTrue<TrueType>() { return true; } template <> bool getIsTrue<FalseType>() { return false; } int main(int, char **t ) { cout << getIsTrue< isX<char>::ikIsX >() << endl; cout << getIsTrue< isX<int8>::ikIsX >() << endl; cout << getIsTrue< isX<uint8>::ikIsX >() << endl; }</code>
Dieser Code wird kompiliert, erzeugt jedoch andere Ergebnisse für char als für int8 und uint8. Dies liegt daran, dass C „char“, „signed char“ und „unsigned char“ als drei verschiedene Typen behandelt.
Im Gegensatz dazu sind int und uint32 äquivalente Typen:
<code class="cpp">template <> struct isX<int > { typedef FalseType ikIsX; }; template <> struct isX<unit32> { typedef FalseType ikIsX; };</code>
Diese Unterscheidung ergibt sich aus der Tatsache, dass char wurde in der Vergangenheit sowohl zur Darstellung von Zeichen als auch zum Speichern numerischer Werte verwendet. Infolgedessen behält C die Abwärtskompatibilität bei, indem es einfach char als separaten Typ behandelt, der sich von int unterscheidet.
Um zu bestimmen, welche der beiden Darstellungen char verwendet, wird die durch die Implementierung definierte Typdefinition char_traits
Das obige ist der detaillierte Inhalt vonSind „char', „signed char' und „unsigned char' in C wirklich unterschiedlich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!