Heim > Backend-Entwicklung > C++ > Hauptteil

Warum verhalten sich „char', „signed char' und „unsigned char' anders als „int' und seine Varianten in C-Vorlagenspezialisierungen?

Susan Sarandon
Freigeben: 2024-10-26 19:01:30
Original
384 Leute haben es durchsucht

Why do `char`, `signed char`, and `unsigned char` behave differently from `int` and its variants in C   template specializations?

char!=(signed char), char!=(unsigned char) [duplicate]

In bestimmten Szenarien behandelt C char, signierte char und unsigned char als unterschiedliche Typen, im Gegensatz zu int und seinen Varianten. Dieses Verhalten ergibt sich aus der Natur der Zeichentypen in C, wie im C-Standard beschrieben:

Plain char, signed char, and unsigned char are three distinct types.
Nach dem Login kopieren

Während int normalerweise gleichbedeutend mit signiertem int ist, hat char nicht die gleiche Beziehung zu signiertem Char oder unsigniertem Char . Dies bedeutet, dass Vorlagenspezialisierungen für diese Typen separat instanziiert werden.

Im bereitgestellten Code werden drei Vorlagenspezialisierungen erstellt:

  • isX::ikIsX (für signierte Zeichen )
  • isX::ikIsX (für vorzeichenloses Zeichen)
  • isX::ikIsX (für einfaches Zeichen)

Allerdings für int und seinen Varianten wird nur eine Vorlagenspezialisierung erstellt, da sie alle als vom gleichen Typ betrachtet werden, sofern nicht ausdrücklich als signiert oder nicht signiert angegeben.

Daher zeigt die Ausgabe im gegebenen Beispiel drei verschiedene Werte für isX::ikIsX-Typ-Aliase für int8, uint8 und char, während für int32, uint32 und int nur ein Wert angezeigt wird.

Diese Unterscheidung ist wichtig zu verstehen, wenn Sie mit Vorlagen-Metaprogrammierung und Typ-Introspektion arbeiten C.

Das obige ist der detaillierte Inhalt vonWarum verhalten sich „char', „signed char' und „unsigned char' anders als „int' und seine Varianten in C-Vorlagenspezialisierungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage