C++ 11引入了一组新的字符串文字前缀(甚至允许用户定义的后缀)。最重要的是,您可以直接使用Unicode转义序列来编码某个符号,而不必担心编码。Unicode字符串文字
const char16_t* s16 = u"\u00DA";
const char32_t* s32 = U"\u00DA";
但我可以使用Unicode转义序列wchar_t
字符串文字呢?如果这不可能,这似乎是一个缺陷。
const wchar_t* sw = L"\u00DA";
的sw[0]
整数值当然会依靠什么wchar_t
是在特定平台上,但所有其他的效果,这应该是便携式的,不是吗?
相信SW的'值[0]'取决于什么'wchar_t'是在特定平台上只的程度'wchar_t'的大小是多少。即'\ u00DA'应该总是会导致U + 00DA的一些Unicode编码(UTF-8,UTF-16,UTF-32),即使这不是该类型的平台的正常编码。 – bames53
其实以上是不正确的。实现应该将通用字符名称视为文字字符。因此,如果实现将字符串文字中的字符转换为执行字符集,那么它也应该使用UCN执行此操作。如果UCN位于unicode字面内(例如,u8“\ u00DA”),则只保证UTF编码。 – bames53