从讨论开始here开始,标准是否指定了字符的值?那么,'0'
保证是48吗?这就是ASCII告诉我们的,但它有保证吗?如果没有,您是否看到'0'
不是48的任何编译器?
答案 0 :(得分:16)
没有。不要求源或执行字符集使用带有ASCII子集的编码。我还没有看到任何非ASCII实现,但我知道有人知道有人。 (要求' 0' - ' 9'有连续的整数值,但这是SO上其他地方的重复问题。)
用于源字符集的编码控制如何将源代码的字节解释为C ++语言中使用的字符。该标准将执行字符集的成员描述为具有值。将这些字符映射到其对应值的编码确定'0'
的整数值。
尽管基本源字符集中的至少所有成员加上一些控制字符和值为零的空字符必须在执行字符集中存在(具有适当的值),但是不要求编码为ASCII或对任何特定字符子集使用ASCII值(空字符除外)。
答案 1 :(得分:11)
不,标准非常小心,不要指定源字符编码是什么。
C ++和C ++编译器也在EBCDIC计算机上运行,你知道,'0' != 0x30
。
但是,我认为需要'1' == '0' + 1
。
答案 2 :(得分:3)
EBCDIC中的0xF0
。我从来没有使用过EBCDIC编译器,但我被告知他们在IBM已经风靡一时了。
C ++标准中没有要求源代码或执行编码是基于ASCII的。保证'0' == '1' - 1
(并且通常数字是连续的并且按顺序)。 不保证字母是连续的,确实在EBCDIC 'J' != 'I' + 1
和'S' != 'R' + 1
中。
答案 3 :(得分:2)
根据C ++ 11标准N3225
基本源字符集成员的字形是 旨在识别ISO / IEC 10646子集中的字符 对应于ASCII字符集。但是,因为映射 从源文件字符到源字符集(描述于 翻译阶段1)被指定为实现定义,an 实现是否需要记录基本源字符的方式 在源文件中表示
简而言之,即使我从未听说过任何不同的实现,也不需要将字符集映射到ASCII表