const int cMax = int.MaxValue;
 int vMax = cMax;
 int int1;
 int int2;
 int1 = cMax + 10;//Checked amd throws error
 int2 = vMax+10;//Unchecked and Overflows at runTime

在这里可以看到,涉及常量的操作默认情况下处于选中状态,而涉及变量的操作则处于未选中状态并通过编译。

为什么在编译行为上有这种差异?

最佳答案

行为不同,因为cMax + 10是一个常量表达式。根据C# Language Reference



因此,编译器必须在编译时评估您的表达式。由于它无法产生有效值作为计算结果,因此会产生编译时错误。使用 checked keyword启用对整数的溢出检查。

10-08 14:15