引自C ++ 03 2.2字符集:
“基本执行字符集和基本执行 宽字符集应各自包含基本的所有成员 source character set ..执行成员的值 字符集是实现定义的,以及任何其他成员 是特定于语言环境的。“
根据此,'A'
属于执行字符集,其值是实现定义的。所以它不是65(十进制的'A'
的ASCII码),是什么?!
// Not always 65?
printf ("%d", 'A');
或者我对执行字符集中字符的值有误解?
答案 0 :(得分:5)
当然,如果执行字符集是ASCII或超集(例如UTF-8),它可以是ASCII的65。
它没有说“它不能是ASCII”,它说它是“执行字符集”。
答案 1 :(得分:1)
因此,该标准允许“执行字符集”是除ASCII或ASCII衍生物之外的其他内容。一个例子是IBM长期使用的EBCDIC字符集(可能还有关于使用EBCDIC的机器,但我怀疑在过去10到15年内构建的任何东西都不会使用它)。 EBCDIC中的字符编码与ASCII完全不同。
因此,在代码中期望'A'的值是任何特定值是不可移植的。还有一大堆其他“常见假设”将失败 - A-Z之间没有“漏洞”,并且'A' - 'a'== 32在EBCDIC中都是假的。至少字符A-Z的顺序正确! ;)