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

时间:2014-05-17 14:08:14

标签: c++ c++11 unicode

根据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

2 个答案:

答案 0 :(得分:5)

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

  

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

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

答案 1 :(得分:3)

它是实现定义的:

§2.2翻译阶段:

  
      
  1. [...]接受的物理源文件字符集是实现定义的。 [...]任何源文件字符都不在基本字符中   源字符集(2.3)由指定该字符的通用字符名称替换。 (实现可以使用任何内部编码,只要是实际的扩展字符   在源文件中遇到,并且在源文件中表示的相同扩展字符为   通用字符名称(即使用\ uXXXX表示法)等效处理[...]。)
  2.   
相关问题