5

引用 C++03 2.2 字符集:

“基本执行字符集和基本执行宽字符集应分别包含基本源字符集的所有成员。执行字符集成员的值是实现定义的,任何附加成员都是语言环境-具体的。”

据此'A',属于执行字符集的,其值是实现定义的。所以不是65('A'十进制的ASCII码),什么?!

// Not always 65?
printf ("%d", 'A');

还是我对执行字符集中字符的值有误解?

4

2 回答 2

7

当然,如果执行字符集是 ASCII 或超集(例如 UTF-8),它可以是 ASCII 的 65。

它没有说“它不能是 ASCII”,而是说它是一种叫做“执行字符集”的东西。

于 2013-05-02T13:41:55.130 回答
1

因此,该标准允许“执行字符集”是 ASCII 或 ASCII 衍生物以外的其他东西。一个例子是 IBM 长期使用的 EBCDIC 字符集(可能仍然有机器使用 EBCDIC,但我怀疑过去 10-15 年构建的任何东西都不会使用它)。EBCDIC 中的字符编码与 ASCII 完全不同。

因此,在代码中期望“A”的值是任何特定值是不可移植的。还有一大堆其他“常见假设”将失败 - AZ 之间没有“漏洞”,并且 'A'-'a' == 32 在 EBCDIC 中都是错误的。至少字符 AZ 的顺序是正确的!;)

于 2013-05-02T14:36:50.003 回答