c# - 为什么需要数字后缀?

标签 c# compiler-construction

C# 语言(以及我确定的其他语言)要求在数字文字末尾添加后缀。这些后缀表示文字的类型。例如,5m是一个小数,5f是一个 float 。

我的问题是:这些后缀是否真的有必要,或者是否可以从上下文中推断出文字的类型?

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

最佳答案

通常,我们尝试设计语言,以便有关类型的信息“流出”,而不是“流入”。也就是说,表达式的类型是通过首先分析它的每个子表达式来确定的,然后我们看它是否与其上下文一致——我们通常不会走另一条路,从上下文推理到子表达式。当类型信息可以双向流动时,您可能会遇到一些非常难以分析的情况,就像 lambda 表达式一样。

现在,在您提到的特定情况下,我们可以编写一条规则,说明“可以在不损失精度或大小的情况下转换为十进制的浮点文字不需要 m 后缀” ,就像适合 short 自动转换的文字整数一样。但是添加“m”很容易,当一些文字自动转换而另一些文字没有自动转换时会造成混淆,并且要求类型一致会使代码更容易理解和更多的 self 记录。

关于c# - 为什么需要数字后缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1678591/

相关文章:

c# - 使用全局程序集缓存 (GAC) - 以其设计的方式

javascript - 使用 ASP.Net Core SDK 3.0 preview8(Blazor 框架)上传图片

python - 通过解释器变异混淆 python 字节码

c - 跨平台定位crti

c# - 带有浮点文字与浮点变量的奇怪编译器行为

c# - Sitecore publishend 事件,从事件参数中获取项目

c# - 在 Xamarin.Forms 中获取 Image 或 ImageSource 的 bytes[]/stream?

c# - 构建女妖:缺少依赖项

c++ - 如果我在 GCC 中编译和链接不需要的库会怎样?

c# - 在 C# 中优化代码是否存在风险?