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