Unicode-Zeichentypen und Literale (C++11)
Nach oben zu C++11-Features - Index
BCC32 implementiert neue Zeichentypen und Zeichenliterale für Unicode. Diese Typen gehören zu den zu BCC32 hinzugefügten C++11-Features.
Inhaltsverzeichnis
Zeichentypen char16_t
und char32_t
Zwei neue Typen repräsentieren Unicode-Zeichen:
- char16_t ist ein 16 Bit-Zeichentyp. char16_t ist ein C++-Schlüsselwort. Dieser Typ kann für UTF-16-Zeichen verwendet werden.
- char32_t ist ein 32 Bit-Zeichentyp. char32_t ist ein C++-Schlüsselwort. Dieser Typ kann für UTF-32-Zeichen verwendet werden.
Der vorhandene Typ wchar_t ist ein Typ für ein Wide-Zeichen in dem Wide-Zeichensatz der Ausführung. Ein wchar_t-Wide-Zeichenliteral beginnt mit dem Großbuchstaben L (z.B. L'c'
).
Zeichenliterale u'Zeichen'
und U'Zeichen'
Es gibt zwei Formen für die Erstellung von Zeichenliteralen der neuen Typen:
u'Zeichen'
ist ein Literal für ein einzelnes char16_t-Zeichen, wie z.B.u'g'
. Ein Mehrzeichenliteral, wie z.B.u'kh'
, ist nicht wohlgeformt. Der Wert eines char16_t-Literals entspricht seinem ISO 10646 Codepoint-Wert, vorausgesetzt, dass der Codepoint als ein 16-Bit-Wert darstellbar ist. Nur Zeichen in der Basic Multilingual Plane (BMP) können dargestellt werden.U'Zeichen'
ist ein Literal für ein einzelnes char32_t-Zeichen, wie z.B.U't'
. Ein Mehrzeichenliteral, wie z.B.U'de'
, ist nicht wohlgeformt. Der Wert eines char32_t-Literals entspricht seinem ISO 10646 Codepoint-Wert.
Multibyte-Zeichenliterale hatten früher nur die Form L'Zeichen'
und stellten ein oder mehrere Zeichen des Typs wchar_t dar. Der Wert eines Wide-Zeichenliterals mit einem einzelnen Zeichen ist die Codierung dieses Zeichens im Wide-Zeichensatz der Ausführung.
String-Literale u"UTF-16_string"
und U"UTF-32_string"
Es gibt zwei neue Formen für die Erstellung von String-Literalen der neuen Typen:
u"UTF-16_string"
ist ein String-Literal mit Zeichen des Typs char16_t, z.B.u"string_containing_UTF-16_encoding_characters"
.
u"UTF-32_string"
ist ein String-Literal mit Zeichen des Typs char32_t, z.B.U"string_containing_UTF-32_encoding_characters"
.