我的程序使用代码:
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