考虑一个具有 UTF-8 执行字符集的 C++11 编译器(并且符合要求char
类型为有符号 8 位字节的 x86-64 ABI)。
字母 Ä(变音符号)的 unicode 代码点为0xC4
,并且有 2 个代码单元 UTF-8 表示{0xC3, 0x84}
编译器为字符字面量分配一个值为 的'\xC4'
类型。int
0xC4
编译器是否符合标准和 ABI?你的理由是什么?
C++11标准的相关引用:
2.14.3.1
包含单个 c-char 的普通字符文字具有 char 类型,其值等于执行字符集中 c-char 编码的数值。包含多个 c-char 的普通字符文字是多字符文字。多字符文字具有 int 类型和实现定义的值。
2.14.3.4
转义符 \xhhh 由反斜杠后跟 x 后跟一个或多个十六进制数字组成,这些数字用于指定所需字符的值。如果字符文字的值超出为 char 定义的实现定义范围,则它的值是实现定义的