作为my previous question的后续行动,我在零除以后发现奇怪的行为(使用控制台)。我发现以下两个语句编译良好:
Console.WriteLine(1d / 0d);
Console.WriteLine(1f / 0f);
然而这两个给出了编译时错误:
Console.WriteLine(1 / 0);
Console.WriteLine(1m / 0m);
中
除以零
为什么这种行为存在差异?
答案 0 :(得分:0)
对于float和double类型,允许除以0。它返回无穷大。
对于Int32和Decimal,不允许,它会引发异常。 编译器不允许在常量值上除以0,因为它会导致未定义的行为。
public class MyConsts {
public const int i = 1/0; // Constant, compile time evaluation
}
...
Console.WriteLine(MyConsts.i); // What would you expect ?
编译器无法为常量表达式计算适当的值。请记住,该值是在运行时编译的,而不是在运行时进行评估,因此无法引发异常。