【发布时间】:2015-03-02 07:08:11
【问题描述】:
从 C++14 开始,感谢n3781(它本身并没有回答这个问题),我们可以编写如下代码:
const int x = 1'234; // one thousand two hundred and thirty four
目的是改进这样的代码:
const int y = 100000000;
并使其更具可读性。
下划线 (_) 字符在 C++11 中已被用户定义的文字采用,而逗号 (,) 存在本地化问题 — 许多欧洲国家莫名其妙地†使用this 作为小数点分隔符 - 并且与逗号运算符冲突,尽管我确实想知道允许例如可能会破坏哪些实际代码1,234,567.
无论如何,更好的解决方案似乎是空格字符:
const int z = 1 000 000;
这些相邻的数字文字标记可以由预处理器连接起来,就像字符串文字一样:
const char x[5] = "a" "bc" "d";
相反,我们得到了撇号 ('),我所知道的任何书写系统都没有将它用作数字分隔符。
是否有理由选择撇号而不是简单的空格?
† 令人费解的是,所有这些语言在文本中都保持逗号“分解”原本原子句子的概念,句号用于“终止”句子- 至少对我来说,这非常类似于逗号“分解”数字的整数部分和句点“终止”它,为小数输入做好准备。
【问题讨论】:
-
关于逗号,是不是逗号操作符的问题,而不是本地化问题?
-
@LightnessRacesinOrbit:我认为没有人打算改变
int a[] = {123,000,000}的含义。至于逗号与句号的区别,请注意这些都是最近标准化的——无论是文本还是数字。 -
除了技术点之外,您说撇号 ('), [is] 不被我所知道的任何书写系统用作数字分隔符。有一个国家使用撇号作为数字分隔符:瑞士。我也曾在作者更喜欢它的情况下看到它,或者一个点/逗号会引起混淆,因为它们在国际上的使用方式不同。
-
如果这让你感觉好些,我是欧洲人,感谢美国制造的许多产品(计算器等)使用逗号作为十进制值 - 幸运的是 - 非常缓慢地失去了味道.我想说 0.99 现在比 0.99 使用更广泛;使用逗号作为千位分隔符是闻所未闻的,就像使用点一样,我们只是不分隔它们(可能是因为现在 1,234 和 1.234 都表示小数)
-
@BenjaminLindley 我原以为逗号的问题是
int foo(int);int foo(int,int); foo(1,000);的含糊不清
标签: c++ language-lawyer c++14 digit