Unicode-Codierung für String-Literale in C ++ 11

Folgenden eine stellt sich die Frage,würde ich mag zu Fragen, über das neue Zeichen und string-literal-Typen in C++11. Es scheint, dass wir jetzt haben vier Arten von Charakteren und fünf Arten von string-literalen. Die Charakter-Typen:

char     a =  '\x30';         //character, no semantics
wchar_t  b = L'\xFFEF';       //wide character, no semantics
char16_t c = u'\u00F6';       //16-bit, assumed UTF16?
char32_t d = U'\U0010FFFF';   //32-bit, assumed UCS-4

Und die string-Literale:

char     A[] =  "Hello\x0A";         //byte string, "narrow encoding"
wchar_t  B[] = L"Hell\xF6\x0A";      //wide string, impl-def'd encoding
char16_t C[] = u"Hell\u00F6";        //(1)
char32_t D[] = U"Hell\U000000F6\U0010FFFF"; //(2)
auto     E[] = u8"\u00F6\U0010FFFF"; //(3)

Dies ist die Frage: Sind die \x/\u/\U Charakter Referenzen frei kombinierbar mit allen string-Typen? Sind alle string-Typen mit fester Breite, d.h. die arrays enthalten, die genau so viele Elemente wie angezeigt in die wörtliche oder zu \x/\u/\U Referenzen erweitert, die in eine variable Anzahl von bytes? Tun u"" und u8"" strings haben die Codierung der Semantik, z.B. kann ich sagen char16_t x[] = u"\U0010FFFF"und die nicht-BMP-Codepunkt wird kodiert in einer zwei-Einheit UTF16-Sequenz? Und ähnlich für u8? In (1), kann ich schreiben lone Surrogate mit \u? Schließlich sind die string-Funktionen Codierung bewusst (D. H. Sie sind Charakter-bewusst und erkennt ungültige byte-Sequenzen)?

Dies ist ein bisschen eine offene Frage, aber ich möchte, um ein möglichst vollständiges Bild wie möglich von der neuen UTF-Codierung und Typ Ausstattung des neuen C++11.

InformationsquelleAutor der Frage Kerrek SB | 2011-07-22

Schreibe einen Kommentar