int.MaxValue
是一个常量值,因此编译器可以计算int.MaxValue + 1
并确定它溢出了 的范围int
。
编译器不够复杂,无法知道、计算并确定它是否溢出。x
int.MaxValue
x + 1
编译器不会“评估”第二个 - 它只是将表达式转换为程序运行时评估的等效 IL 代码(这显然会在运行时溢出)。
如果第一个示例使用未溢出的常量表达式(例如int.MaxValue - 1
),则编译器可以用 IL 中常量表达式的结果替换该表达式。
这就是“在编译时评估”的全部含义
归档时间: |
|
查看次数: |
51 次 |
最近记录: |