在未检查的上下文中,如果表达式产生目标类型范围之外的值,则结果被截断。例如:
unchecked
{
int val = 2147483647 * 2;
} 因为上面的计算在 unchecked 块中执行,所以结果对于整数来说太大这一事实被忽略,并且 val 被赋予值 -2。默认情况下,启用溢出检测,这与使用 checked 具有相同的效果。
在上面的示例中,如果省略 unchecked,将产生编译错误,因为表达式使用常数,结果在编译时是已知的。unchecked 关键字还取消对非常数表达式的溢出检测,这是为了避免在运行时导致 OverflowException。
unchecked 关键字还可以用作运算符,如下所示:
public int UncheckedAdd(int a, int b)
{
return unchecked(a + b);
}