1

根据 C++14 标准,

§2.2.1.1 [...] 接受的物理源文件字符集是实现定义的。[...]任何不在基本源字符集中的源文件字符都被指定该字符的通用字符名替换。[...]

这是否意味着 C++ 标准没有为非 UCS/Unicode 字符提供实现定义或有条件支持的支持?例如,物理源文件编码包括没有相应 UCS 代码点的字符。

我能想到的唯一想法是,如果是这种情况(编译器通过非 UCS 编码支持非 UCS 字符),编译器必须使用私有 UCS 范围来映射这些物理字符,但无论如何,该解决方案不会适合“指定该字符的通用字符名称”部分,因为私有范围内的 UCS 代码点根本没有定义任何特定字符。

4

1 回答 1

1

并不真地。. 有点儿。[lex.phases] 引用 IMO 的重要部分如下:

物理源文件字符被映射,[...],到基本源字符集

仅支持基本的源字符集,其他所有内容都必须以某种方式映射到它([lex.charset]):

a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9
_ { } [ ] # ( ) < > % : ; . ? * + - / ^ & | ~ ! = , \ " ’

但该标准还规定,如有必要,它应该这样做。它接着说:

接受的物理源文件字符集是实现定义的。

所以我想这允许编译器最终做它想做的任何事情,只要它至少支持基本字符集。

于 2017-08-31T22:20:12.507 回答