之间有什么区别
checked(a + b)
和
unchecked(a + b)
答案 0 :(得分:19)
这些是在结果数值运算中检查(或不检查)溢出的运算符。在checked
情况下,如果操作结果超出数据类型允许的最小值或最大值,则会引发OverflowException
异常。
更多信息可从MSDN获得。
答案 1 :(得分:10)
它控制overflow checking进行整数运算。
答案 2 :(得分:7)
如果a + b大于数据类型的最大值,则checked将抛出异常。未选中将滚动值的溢出并将其添加到零。
答案 3 :(得分:5)
Language Specification有一篇关于差异的好文章。
checked和unchecked运算符用于控制整数类算术运算和转换的溢出检查上下文。
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
}
}
答案 4 :(得分:1)
其他答案涵盖了两者之间的差异。值得注意的是,如果a和b是浮点数,则没有区别。它仅适用于整数运算。
您还可以设置构建选项,以便检查所有内容。这意味着您的应用程序运行速度稍慢,但您不需要对算术运算进行检查。
这是一篇很好的文章,描述了一些陷阱:http://www.codeproject.com/KB/cs/overflow_checking.aspx