gpt4 book ai didi

c++ - 为什么没有为 C++14 数字分隔符选择空格字符?

转载 作者:IT老高 更新时间:2023-10-28 13:21:02 26 4
gpt4 key购买 nike

从 C++14 开始,感谢 n3781 (这本身并不能回答这个问题)我们可以编写如下代码:

const int x = 1'234; // one thousand two hundred and thirty four

目的是改进这样的代码:

const int y = 100000000;

并使其更具可读性。

下划线 (_) 字符在 C++11 中已被用户定义的文字采用,而逗号 (,) 存在本地化问题 — 许多欧洲国家令人费解地 使用它作为小数分隔符 - 并且与逗号运算符冲突,但我确实想知道允许例如可能会破坏哪些实际代码1,234,567.

无论如何,更好的解决方案似乎是空格字符:

const int z = 1 000 000;

这些相邻的数字文字标记可以由预处理器连接起来,就像字符串文字一样:

const char x[5] = "a" "bc" "d";

相反,我们得到了撇号 ('),我所知道的任何书写系统都没有将它用作数字分隔符。

是否有理由选择撇号而不是简单的空格?


令人费解的是,所有这些语言在文本中都保留了逗号“拆分”原本原子句子的概念,句号用于“终止”句子——至少对我来说,这非常类似于逗号“分解”数字的整数部分和句点“终止”它,为小数输入做好准备。

最佳答案

以前有一篇论文,n3499 ,这告诉我们,尽管 Bjarne 本人建议将空格作为分隔符:

While this approach is consistent with one common typeographic style, it suffers from some compatibility problems.

  • It does not match the syntax for a pp-number, and would minimally require extending that syntax.
  • More importantly, there would be some syntactic ambiguity when a hexadecimal digit in the range [a-f] follows a space. The preprocessor would not know whether to perform symbol substitution starting after the space.
  • It would likely make editing tools that grab "words" less reliable.

我猜下面的例子是注意到的主要问题:

const int x = 0x123 a;

虽然在我看来这个理由是相当薄弱的。我仍然想不出一个真实的例子来打破它。

“编辑工具”的原理更糟,因为 1'234 基本上破坏了人类已知的所有语法荧光笔(例如 Markdown 在上述问题本身中使用的!)并制作了更新版本说荧光笔更难实现。

不过,无论好坏,这都是导致采用撇号的理由。

关于c++ - 为什么没有为 C++14 数字分隔符选择空格字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27767781/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com