一位同事告诉我:
C++ 不支持 ASCII。
C++程序的源字符集是实现定义的,那么我的同事在多大程度上是不正确的?
当 c++ 编译器将数值链接48
到'0'
. 所以是的,它需要能够识别 ASCII。
但它总是需要吗?假设您使用EBCDIC ( '0' => 240
)。那么编译器可能不关心ASCII。也许这就是你同事的意思。
一般来说,C++ 并不真正关心 ASCII。这是一个实现细节。
C++ 标准文本“意识到” ASCII,因为它在脚注中进行了非规范性提及:
[C++11: Footnote 14]:
基本源字符集成员的字形旨在识别对应于 ASCII 字符集的 ISO/IEC 10646 子集中的字符。然而,因为从源文件字符到源字符集的映射(在翻译阶段 1 中描述)被指定为实现定义,所以需要一个实现来记录基本源字符在源文件中是如何表示的。
在这样做时,它声明标准化语言本身不支持 ASCII。
“对我来说,这似乎是对 ASCII 的认识!” 你可能会说。嗯,不。在语言定义中仅仅提到“ASCII”并没有使语言能够识别 ASCII。这与您可以编程机器人说出“我没有自我意识”这句话的方式相同,而无需机器人意识到自己。