这编译
var fourGb = (long)4*1024*1024*1024;
但这失败了
var fourGb = 4*1024*1024*1024;
使用“在检查模式下编译时操作溢出”。
因此,如果编译器知道这将是溢出,为什么它不能推断变量类型应该是 long 呢?
这编译
var fourGb = (long)4*1024*1024*1024;
但这失败了
var fourGb = 4*1024*1024*1024;
使用“在检查模式下编译时操作溢出”。
因此,如果编译器知道这将是溢出,为什么它不能推断变量类型应该是 long 呢?
请参阅http://msdn.microsoft.com/en-us/library/ctetwysk%28VS.80%29.aspx
您要求它乘以一堆 int,因此答案是根据 C# 语法的 int。如果您想要长,请使用“L”。
var fourGb = 4L * 1024 * 1024 * 1024;
想象一下会引起的骚动。“但是编译器可以计算出一个表达式应该被评估多久,为什么运行时不能这样做呢?”
这不会发生,太贵了。
编译器必须以与运行时相同的方式评估表达式。如果不是这种情况,编辑常量表达式并用变量替换常量可能会突然导致运行时失败。很难诊断出故障,默认情况下不选中非常量表达式。
我认为通过计算结果来推断变量的类型不是一个好主意。
在大多数语言中都是一样的:
任何其他行为都会产生意想不到的后果
可以说你已经:
double varname = 1/2