代码之家  ›  专栏  ›  技术社区  ›  Simon Randy Burden

为什么编译器不能推断出一个大数就是一个长数?

  •  3
  • Simon Randy Burden  · 技术社区  · 14 年前

    这就是

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

    但这失败了

    var fourGb = 4*1024*1024*1024;
    

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

    4 回复  |  直到 14 年前
        1
  •  2
  •   Hans Passant    14 年前

    想象一下会引起的骚动。”但是编译器可以计算出一个表达式的计算长度,为什么运行时不能呢?”

    方式 太贵了。

        2
  •  4
  •   Ian Mercer    12 年前

    看到了吗 http://msdn.microsoft.com/en-us/library/ctetwysk%28VS.80%29.aspx

    你让它把一堆整数相乘,所以根据C#语法,答案是一个整数。如果你想长时间的话就用“L”。

    var fourGb = 4L * 1024 * 1024 * 1024;
    
        3
  •  2
  •   tia    14 年前

        4
  •  0
  •   Community Egal    7 年前

    • 表达式的数据类型遵循优先规则

    任何其他行为都会造成意想不到的后果