İlgili bir soruyu takiben , C ++ 11'deki yeni karakter ve dize değişmez türleri hakkında soru sormak istiyorum. Görünüşe göre şimdi dört çeşit karakterimiz ve beş çeşit dizgi değişmezimiz var. Karakter türleri:
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
Ve dize değişmezleri:
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)
Soru şudur: \x/ \u/ \Ukarakter başvuruları tüm dizgi türleriyle serbestçe birleştirilebilir mi? Tüm dizgi türleri sabit genişlikte mi, yani diziler tam olarak değişmez değerde göründüğü kadar çok öğe içeriyor mu, yoksa \x/ \u/ \Ubaşvuruları değişken sayıda bayta genişletiliyor mu? u""Ve u8""dizelerin kodlama semantiği var mı , örneğin diyebilirim char16_t x[] = u"\U0010FFFF"ve BMP olmayan kod noktası iki üniteli bir UTF16 dizisine kodlanır mı? Ve benzer şekilde için u8? (1) 'e yalnız vekiller yazabilir miyim \u? Son olarak, kodlama işlevlerinden herhangi biri farkında mı (yani, karakter farkındalar ve geçersiz bayt dizilerini saptayabilirler)?
Bu biraz açık uçlu bir soru, ancak yeni C ++ 11'in yeni UTF kodlama ve tür olanaklarının olabildiğince eksiksiz bir resmini elde etmek istiyorum.
u"\U0010FFFF"bir vekil çift olarak kodlar .