Le codage Unicode pour les littéraux de chaîne en C++11

À la suite d'une une question relative à la, j'aimerais poser des questions sur le nouveau personnage et littéral de chaîne types en C++11. Il semble que nous avons maintenant quatre sortes de personnages et cinq sortes de littéraux de chaîne. Les types de caractères:

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

Et les littéraux de chaîne:

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)

La question est celle-ci: le \x/\u/\U références de caractère librement combinable avec tous les types de chaînes? Sont tous les types de chaînes de largeur fixe, c'est à dire les tableaux contiennent précisément que de nombreux éléments apparaissent dans le littéral, ou à \x/\u/\U références obtenir étendue en un nombre variable d'octets? Ne u"" et u8"" chaînes de codage sémantique, par exemple, je peux dire char16_t x[] = u"\U0010FFFF", et la non-BMP codepoint encodés dans un de deux unité UTF16 séquence? Et de même pour u8? Dans (1), puis-je écrire solitaire mères porteuses avec \u? Enfin, les fonctions de chaîne de codage de courant (c'est à dire qu'ils sont de caractère conscient et peut détecter des invalides les séquences d'octets)?

C'est un peu une question ouverte, mais j'aimerais obtenir une image aussi complète que possible de la nouvelle UTF-encodage et le type des installations de la nouvelle C++11.

  • GCC ne codent u"\U0010FFFF" dans une paire de substitution.
  • Quelles sont x u et U en liesse sur?
InformationsquelleAutor Kerrek SB | 2011-07-22