関連する質問に続いて、C ++ 11の新しい文字と文字列リテラルタイプについて質問したいと思います。現在、4種類の文字と5種類の文字列リテラルがあるようです。文字タイプ:
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
そして文字列リテラル:
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)
質問はこれです:です\x
/ \u
/\U
すべての文字列型と自由に組み合わせ可能文字参照?すべては、配列リテラルに表示される多くの要素として正確に含まれている、またはにつまり、文字列型、固定幅のある\x
/ \u
/\U
参照バイトの可変数に拡大しますか?ドu""
とu8""
文字列は例えば、セマンティクスをコードしている私が言うことができchar16_t x[] = u"\U0010FFFF"
、かつ非BMPコードポイントは、2単位のUTF16シーケンスにエンコードされますか?そして同様にu8
?(1)で、孤独な代理人を書くことはでき\u
ますか?最後に、文字列関数のいずれかがエンコーディングを認識していますか(つまり、文字を認識し、無効なバイトシーケンスを検出できます)?
これは少し自由形式の質問ですが、新しいC ++ 11の新しいUTFエンコーディングおよびタイプ機能の全体像をできるだけ完全に把握したいと思います。
u"\U0010FFFF"
サロゲートペアにエンコードします。