C++ 直接在字符文字中输入unicode而不是使用通用字符名是否违法?
根据ISO/IEC 14882:2011(§2.14.3),字符文字(也称为常量)如下图所示C++ 直接在字符文字中输入unicode而不是使用通用字符名是否违法?,c++,c++11,unicode,C++,C++11,Unicode,根据ISO/IEC 14882:2011(§2.14.3),字符文字(也称为常量)如下图所示 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-qu
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++和VisualStudioC++,都不需要用它来烦扰,这有点令人困惑。每个实现是否在编译开始之前自动将这些Unicode转换为通用字符名,而不考虑标准?我认为第一个“翻译阶段”处理的是(C++11 2.2/1:1.):
不在基本源字符集(2.3)中的任何源文件字符将替换为指定该字符的通用字符名
因此,您的输入文件在源字符集中编码,其中包括基本源字符集,但在程序文本中,所有非基本字符都被其通用字符名替换。它的实现定义为: §2.2翻译阶段:
“在编译开始之前,每个实现是否会自动将这些Unicode转换为通用字符名,而不考虑标准?”我不相信这一点,但我猜clang也支持它。@πάνταῥεῖ 我知道clang也支持它。然而,我在标准中找不到任何清晰的语句。这难道不取决于你的“源字符集”是什么吗?@KerrekSB我认为源字符集和基本源字符集是一样的。我错了吗?@user3647351:不幸的是,错了。看起来“源字符集”这个术语并没有被很清楚地强调,它只出现在几个语法规范中。其描述是实现定义的“接受的物理源字符集”(2.2/1)。