違いは何ですか
checked(a + b)
と
unchecked(a + b)
?
これらは、結果の数値演算のオーバーフローをチェックする(またはチェックしない)演算子です。このchecked
場合、OverflowException
操作の結果がデータ型に許可されている最小値または最大値を超えると、例外が発生します。
詳細については、MSDNから入手できます。
整数演算のオーバーフローチェックを制御します。
a + bがデータ型の最大値よりも大きい場合、checkedは例外をスローします。チェックを外すと、値のオーバーフローがロールされ、ゼロに追加されます。
言語仕様には、違いに関する優れた記事があります。
チェックされた演算子とチェックされていない演算子は、積分型の算術演算と変換のオーバーフローチェックコンテキストを制御するために使用されます。
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
}
}
他の答えは、2つの違いをカバーしています。注目に値することの1つは、aとbがフロートの場合、違いはないということです。整数演算でのみ機能します。
すべてがチェックされるように設定できるビルドオプションもあります。これは、アプリの実行が少し遅くなることを意味しますが、算術演算をチェックする必要はありません。
ここにいくつかの落とし穴を説明する素晴らしい記事があります:http://www.codeproject.com/KB/cs/overflow_checking.aspx