在一个相关问题之后,我想问一下 C++11 中新的字符和字符串文字类型。看起来我们现在有四种字符和五种字符串文字。字符类型:
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
字符引用是否可以与所有字符串类型自由组合?是否所有的字符串类型都是固定宽度的,即数组包含的元素与文字中出现的元素数量一样多,或者/ /引用被扩展为可变数量的字节?和字符串是否具有编码语义,例如,我可以说非 BMP 代码点被编码为两个单元的 UTF16 序列吗?同样对于? 在(1)中,我可以用 写单独的代理吗?最后,是否有任何字符串函数编码感知(即它们是字符感知并且可以检测无效字节序列)?\u
\U
\x
\u
\U
u""
u8""
char16_t x[] = u"\U0010FFFF"
u8
\u
这是一个开放式问题,但我想尽可能完整地了解新 C++11 的新 UTF 编码和类型工具。