16

和有什么区别

checked(a + b)

unchecked(a + b)

?

4

5 回答 5

21

这些是在结果数值运算中检查(或不检查)溢出的运算符。在这种checked情况下,OverflowException如果操作的结果超过数据类型允许的最小值或最大值,则会引发异常。

更多信息可从MSDN获得。

于 2010-09-22T17:04:36.057 回答
10

它控制整数运算的溢出检查

于 2010-09-22T17:03:42.240 回答
8

如果 a + b 大于数据类型的最大值,checked 会抛出异常。未选中将滚动值的溢出并将其添加为零。

于 2010-09-22T17:03:43.347 回答
6

语言规范有一篇关于差异的好文章。

检查和未检查运算符用于控制整数类型算术运算和转换的溢出检查上下文。

class Test
{
   static readonly int x = 1000000;
   static readonly int y = 1000000;
   static int F() {
      return checked(x * y);      // Throws OverflowException
   }
   static int G() {
      return unchecked(x * y);   // Returns -727379968
   }
   static int H() {
      return x * y;               // Depends on default
   }
}
于 2010-09-22T17:36:12.983 回答
2

其他答案涵盖了两者之间的区别。值得注意的一件事是,如果 a 和 b 是浮点数,则没有区别。它仅适用于整数运算。

您还可以设置一个构建选项,以便检查所有内容。这意味着您的应用程序运行速度稍慢,但您无需检查算术运算。

这是一个很好的文章,描述了一些陷阱: http: //www.codeproject.com/KB/cs/overflow_checking.aspx

于 2010-09-22T17:36:36.020 回答