【问题标题】:Is C++ ASCII-aware?C++ ASCII 感知吗?
【发布时间】:2013-04-02 11:45:19
【问题描述】:

一位同事告诉我:

C++ 不支持 ASCII。

C++程序的源字符集是实现定义的,那我的同事到底错到什么程度呢?

【问题讨论】:

  • 你应该问问你的同事他的意思。
  • @R.MartinhoFernandes: .... 该死的。需要更多的 SO 帐户。在这个联合中开始舞台表演。
  • 作为一个稻草人,也许从某种意义上说,数字 0-9 的字符必须按这个顺序排列,没有任何间隙?这与 ascii 本身没有太大关系,但它会禁止一些人为的编码......
  • @PlasmaHH 是否存在不允许的 IANA 注册编码?
  • 只是评论:int ⓽ = 9; 是有效的 C++。

标签: c++ language-lawyer


【解决方案1】:

c++ 编译器在将数字48 值链接到'0' 时需要识别ASCII。所以是的,它需要支持 ASCII。

但它总是需要吗?想象一下,您使用 EBCDIC ('0' => 240)。那么编译器可能不关心ASCII。也许这就是你同事的意思。

一般来说,C++ 并不真正关心 ASCII。这是一个实现细节。

【讨论】:

【解决方案2】:

C++ 标准文本“意识到” ASCII,因为它在脚注中进行了非规范性提及:

[C++11: Footnote 14]: 基本源字符集成员的字形旨在识别对应于 ASCII 字符集的 ISO/IEC 10646 子集中的字符。但是,由于从源文件字符到源字符集的映射(在翻译阶段 1 中描述)被指定为实现定义,因此需要一个实现来记录基本源字符在源文件中的表示方式。

这样做是在声明标准化语言本身是 ASCII 感知的。

“对我来说,这似乎是对 ASCII 的认识!” 你可能会说。嗯,不。在语言定义中仅仅提及“ASCII”并没有使 language 能够识别 ASCII。这与您可以对机器人进行编程以说出“我没有自我意识”这句话的方式相同,而无需机器人意识到自己。

【讨论】:

  • inb4 你可以编程机器人说词。
  • 你能告诉我一些不支持 ascii 的示例语言吗?是低级组装吗?二进制?
  • @GrijeshChauhan:C++ 就是其中之一。
  • @LightnessRacesinOrbit 好的,现在我明白了。 :) 再读一遍。
  • 但是,universal-character-name 的定义基于通用字符集 (ISO/IEC 10646),它是 ASCII 的超集。所以该语言确实对 ASCII 有一定的认识。
猜你喜欢
  • 2011-02-17
  • 2013-12-09
  • 1970-01-01
  • 2011-01-15
  • 2020-05-08
  • 2015-12-22
  • 2020-04-08
  • 1970-01-01
相关资源
最近更新 更多