为什么需要数字后缀?

Tru*_*mpi 3 c# compiler-construction

C#语言(以及我确定的其他语言)在数字文字的末尾需要后缀.这些后缀表示文字的类型.例如,5m是小数,5f是浮点数.

我的问题是:这些后缀真的是必要的,还是可以从其上下文推断出文字的类型?

例如,代码decimal d = 5.0应该推断出它5.0不是double,而是小数.这种语法会导致问题吗?

Eri*_*ert 9

通常,我们尝试设计语言,以便有关类型的信息"流出"而不是"流入".也就是说,表达式的类型是通过首先分析每个子表达式来确定的,然后我们看它是否与其上下文一致 - 我们通常不会采用其他方式,从上下文到子表达式的推理.当类型信息可以双向流动时,您可以进入一些非常难以分析的情况,就像使用lambda表达式一样.

现在,在你提到的特定情况下,我们可以编写一条规则,说"浮点文字可以转换为十进制而不会丢失精度或幅度,不需要m后缀",就像适合短转换的文字整数一样自动.但是添加"m"很容易,当某些文字自动转换而其他文字没有转换时会让人感到困惑,并且要求类型保持一致会使代码更易于理解和更多自我记录.


pax*_*blo 8

这对于简单的情况很好,例如:

float f = 7;
Run Code Online (Sandbox Code Playgroud)

但是要明确这样做要好得多,这样你就不必担心这样的陈述:

float f = (double)(int)(1 / 3 + 6e22 / (double)7);
Run Code Online (Sandbox Code Playgroud)

是的,我知道这是一个人为的例子,但是我们知道编码器的意图来自左侧的类型,特别是如果它根本没有分配给变量(例如作为参数传递给重载函数)可以采用int,float,double,decimal等中的一种.