13

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特定平台上的内容,但对于所有其他效果,这应该是可移植的,不是吗?

4

1 回答 1

10

它会起作用,但它可能没有所需的语义。\u00DA将扩展为 UTF8/16/32 编码所需的尽可能多的目标字符,具体取决于 的大小wchar_t,但请记住,宽字符串没有任何记录的、有保证的编码语义——它们只是“系统的编码” , 没有试图说出那是什么,或要求用户知道那是什么。

所以最好不要混搭。使用两者之一,但不能同时使用两者:

  1. 系统特定:char*/ "", wchar_t*/ L"", \x-literals, mbstowcs/wcstombs

  2. Unicode: char*/ u8"", char16_t*/ u"", char32_t*/ U"", \u/\U文字。

(这里是我关于这个主题的一些 相关 问题。)

于 2011-10-03T15:06:10.880 回答