我的程序使用以下代码:
Convert.ToDouble(Int32.MaxValue)
相当有规律。我只是好奇编译器是如何处理的。它是作为静态双精度存储还是在运行时执行?
我的程序使用以下代码:
Convert.ToDouble(Int32.MaxValue)
相当有规律。我只是好奇编译器是如何处理的。它是作为静态双精度存储还是在运行时执行?
该常量Int32.MaxValue
在编译时存储,实际上您的代码将Convert.ToDouble(0x7FFFFFFF)
在编译时转换为。等效的 IL 为:
ldc.i4 FF FF FF 7F
call System.Convert.ToDouble
该值也被保存,因此可以在运行时通过反射检索。
但是,Convert.ToDouble
是一个仅在运行时评估的函数。
正如minitech所建议的,(double)Int32.MaxValue
在编译时进行评估。等效的 IL 为:
ldc.r8 00 00 C0 FF FF FF DF 41