C# 语言(以及我确定的其他语言)要求在数字文字末尾添加后缀。这些后缀表示文字的类型。例如,5m
是一个小数,5f
是一个 float 。
我的问题是:这些后缀是否真的有必要,或者是否可以从上下文中推断出文字的类型?
例如,代码 decimal d = 5.0
应该推断出 5.0
不是 double ,而是十进制数。这种语法会导致问题吗?
最佳答案
通常,我们尝试设计语言,以便有关类型的信息“流出”,而不是“流入”。也就是说,表达式的类型是通过首先分析它的每个子表达式来确定的,然后我们看它是否与其上下文一致——我们通常不会走另一条路,从上下文推理到子表达式。当类型信息可以双向流动时,您可能会遇到一些非常难以分析的情况,就像 lambda 表达式一样。
现在,在您提到的特定情况下,我们可以编写一条规则,说明“可以在不损失精度或大小的情况下转换为十进制的浮点文字不需要 m 后缀” ,就像适合 short 自动转换的文字整数一样。但是添加“m”很容易,当一些文字自动转换而另一些文字没有自动转换时会造成混淆,并且要求类型一致会使代码更容易理解和更多的 self 记录。
关于c# - 为什么需要数字后缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1678591/