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启用对整数的溢出检查。