チェックされたものとチェックされていないことの違いは何ですか?
質問
違いは何ですか
checked(a + b)
と
unchecked(a + b)
?
解決
これらは、結果の数値操作でオーバーフローをチェック(またはチェックしない)オペレーターです。の中に checked
ケース、an OverflowException
操作の結果がデータ型で許可されている最小値または最大値を超える場合、例外が発生します。
詳細はから入手できます MSDN.
他のヒント
制御します オーバーフローチェック 整数操作用。
A + Bがデータ型の最大値よりも大きい場合、チェックされた場合に例外がスローされます。チェックされていないと、値のオーバーフローが転がり、ゼロに追加されます。
言語仕様 違いについて良い記事があります。
チェックされたオペレーターと未確認の演算子は、積分型算術演算と変換のためのオーバーフローチェックコンテキストを制御するために使用されます。
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
所属していません StackOverflow