更新:2007 年 11 月
unchecked 关键字用于取消整型算术运算和转换的溢出检查。
在未检查的上下文中,如果表达式产生目标类型范围之外的值,则结果被截断。例如:
复制代码 | |
---|---|
unchecked { int val = 2147483647 * 2; } |
因为上面的计算在 unchecked 块中执行,所以结果对于整数来说太大这一事实被忽略,并且 val 被赋予值 -2。默认情况下,启用溢出检测,这与使用
在上面的示例中,如果省略 unchecked,将产生编译错误,因为表达式使用常数,结果在编译时是已知的。unchecked 关键字还取消对非常数表达式的溢出检测,这是为了避免在运行时导致
unchecked 关键字还可以用作运算符,如下所示:
复制代码 | |
---|---|
public int UncheckedAdd(int a, int b) { return unchecked(a + b); } |
示例
此示例演示如何将 unchecked 语句与常量表达式配合使用。
C# | 复制代码 |
---|---|
class TestClass { const int x = 2147483647; // Max int const int y = 2; static void Main() { int z; unchecked { z = x * y; } Console.WriteLine("Unchecked output value: {0}", z); } } // Output: Unchecked output value: -2 |
C# 语言规范
有关更多信息,请参见 C# 语言规范中的以下各章节:
5.3.3.2 Block 语句、checked 和 unchecked 语句
7.5.12 checked 和 unchecked 运算符
8.11 checked 和 unchecked 语句