3

这编译

var fourGb = (long)4*1024*1024*1024;

但这失败了

var fourGb = 4*1024*1024*1024;

使用“在检查模式下编译时操作溢出”。

因此,如果编译器知道这将是溢出,为什么它不能推断变量类型应该是 long 呢?

4

4 回答 4

4

请参阅http://msdn.microsoft.com/en-us/library/ctetwysk%28VS.80%29.aspx

您要求它乘以一堆 int,因此答案是根据 C# 语法的 int。如果您想要长,请使用“L”。

var fourGb = 4L * 1024 * 1024 * 1024;
于 2010-07-21T04:52:48.300 回答
2

想象一下会引起的骚动。“但是编译器可以计算出一个表达式应该被评估多久,为什么运行时不能这样做呢?”

这不会发生,太贵了

编译器必须以与运行时相同的方式评估表达式。如果不是这种情况,编辑常量表达式并用变量替换常量可能会突然导致运行时失败。很难诊断出故障,默认情况下不选中非常量表达式。

于 2010-07-21T04:52:35.067 回答
2

我认为通过计算结果来推断变量的类型不是一个好主意。

于 2010-07-21T20:04:48.333 回答
0

在大多数语言中都是一样的:

  • 表达式的数据类型遵循优先规则
  • 它在赋值时被转换为“var”数据类型

任何其他行为都会产生意想不到的后果

可以说你已经:

于 2010-07-21T05:01:47.600 回答