unchecked (C# リファレンス)
更新 : 2007 年 11 月
unchecked キーワードは、整数型の算術演算および変換に対してオーバーフロー チェックを抑制するのに使用します。
unchecked コンテキストでは、式がチェック先の型の範囲外にある値を生成した場合、結果の値は切り捨てられます。次に例を示します。
unchecked
{
int val = 2147483647 * 2;
}
上の計算は unchecked ブロックで実行されるため、結果が整数に対して大きすぎることは無視され、val に値 -2 が代入されます。既定では、オーバーフローの検出は有効であり、これは checked を使用する場合と同じ効果があります。
上の例では、unchecked を省略した場合、式で定数が使用され、結果がコンパイル時に既知となってしまうため、コンパイル エラーが発生します。unchecked キーワードは、非定数の式に対するオーバーフロー検出も抑制します。この抑制がないと、実行時に OverflowException が発生します。
unchecked キーワードは、次のように、演算子としても使用できます。
public int UncheckedAdd(int a, int b)
{
return unchecked(a + b);
}
使用例
この例では、定数式を指定した unchecked ステートメントを使用する方法を示しています。
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 ブロック ステートメント、checked ステートメント、および unchecked ステートメント
7.5.12 checked 演算子と unchecked 演算子
8.11 checked ステートメントと unchecked ステートメント