为什么小数点在零时给出编译时间错误



作为我以前问题的后续,我注意到零件(与控制台)除以零。我发现以下两个陈述良好:

Console.WriteLine(1d / 0d);
Console.WriteLine(1f / 0f);

这两个给出编译时间错误:

Console.WriteLine(1 / 0);
Console.WriteLine(1m / 0m);

通过常数零

分裂

为什么行为有这种差异?

float和double类型允许按0进行0。它返回无限。

对于INT32和十进制,不允许,它会引起例外。编译器在恒定值上不允许除法0,因为它会导致不确定的行为。

public class MyConsts {
public const int i = 1/0; // Constant, compile time evaluation
}
...
Console.WriteLine(MyConsts.i); // What would you expect ?

编译器无法为您的常数表达式计算正确的值。请记住,该值是在运行时编译的,并且未在运行时进行评估,因此不可能提出例外。

最新更新