提出一个相关问题之后,我想问一下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
/ \u
/\U
字符引用的所有字符串类型自由组合?是否所有的字符串类型的固定宽度,即正是数组包含尽可能多的元素出现在文字,或\x
/ \u
/\U
引用得到扩展成字节数量可变的?DOu""
和u8""
串具有编码的语义,比如我可以说char16_t x[] = u"\U0010FFFF"
,与非BMP代码点被编码成两部分的UTF16序列?和类似的u8
?在(1)中,我可以用写代孕\u
吗?最后,是否有任何编码的字符串函数可以识别(即它们可以识别字符并可以检测到无效的字节序列)?
这是一个开放性问题,但是我想尽可能完整地了解新C ++ 11的新UTF编码和类型功能。
u"\U0010FFFF"
为代理对。