C ++ 11引入了一组新的字符串文字前缀(甚至允许用户定义的后缀)。除此之外,您可以直接使用Unicode转义序列来编码某个符号,而无需担心编码。
const char16_t* s16 = u"\u00DA";
const char32_t* s32 = U"\u00DA";
但是我可以在wchar_t
字符串文字中使用unicode转义序列吗?如果不可能,这似乎是一个缺陷。
const wchar_t* sw = L"\u00DA";
sw[0]
的整数值当然取决于特定平台上的wchar_t
,但对于所有其他效果,这应该是可移植的,不是吗?
答案 0 :(得分:10)
它可以工作,但它可能没有所需的语义。 \u00DA
将扩展为UTF8 / 16/32编码所需的目标字符数,具体取决于wchar_t
的大小,但请记住,宽字符串没有任何记录的,保证编码语义 - - 它们只是“系统的编码”,没有试图说出它是什么,或者要求用户知道是什么。
所以最好不要混合搭配。使用两者中的任何一个,但不是两个: