是非法直接在字符文字中使用unicode而不是使用通用字符名称?

use*_*351 7 c++ unicode c++11

根据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
Run Code Online (Sandbox Code Playgroud)

乍一看,似乎直接放入unicode而不是在character-literal中使用通用字符名称是非法的.然而,大多数编译器,例如g ++和visual studio c ++,都不会对它感到烦恼,这有点令人困惑.无论标准如何,每个实现在编译开始之前是否会自动将这些unicode转换为通用字符名称

Ker*_* SB 5

我认为第一个"翻译阶段"处理(C++ 11 2.2/1:1.):

不在基本源字符集(2.3)中的任何源文件字符将替换为指定该字符的通用字符名称.

因此,您的输入文件将在源字符集中进行编码,其中包括基本源字符集,但在程序文本中,所有非基本字符都将替换为其通用字符名称.