根据ISO / IEC 14882:2011(§2.14.3), character-literal ,也称为常量,如下所示。
character-literal:
’ c-char-sequence ’
u’ c-char-sequence ’
U’ c-char-sequence ’
L’ c-char-sequence ’
...
c-char:
any member of the source character set except
the single-quote ’, backslash \, or new-line character
escape-sequence
universal-character-name
乍一看,似乎直接输入unicode而不是在中使用通用字符名 是非法的。然而,大多数编译器,例如g ++和visual studio c ++,都不会对它感到烦恼,这有点令人困惑。在编译开始之前,无论标准如何,每个实现是否会自动将这些unicode转换为 universal-character-name ?
答案 0 :(得分:5)
我认为第一个“翻译阶段”处理(C ++ 11 2.2 / 1:1。):
任何不在基本源字符集(2.3)中的源文件字符都将替换为指定该字符的通用字符名称。
因此,您的输入文件在源字符集中进行编码,其中包括基本源字符集,但在程序文本中,所有非基本字符都将被其通用字符名称替换。
答案 1 :(得分:3)
它是实现定义的:
§2.2翻译阶段:
- [...]接受的物理源文件字符集是实现定义的。 [...]任何源文件字符都不在基本字符中 源字符集(2.3)由指定该字符的通用字符名称替换。 (实现可以使用任何内部编码,只要是实际的扩展字符 在源文件中遇到,并且在源文件中表示的相同扩展字符为 通用字符名称(即使用\ uXXXX表示法)等效处理[...]。)
醇>