unchecked (C# リファレンス)unchecked (C# Reference)

unchecked キーワードは、整数型の算術演算と変換に対してオーバーフロー チェックを抑制するために使用します。The unchecked keyword is used to suppress overflow-checking for integral-type arithmetic operations and conversions.

unchecked コンテキストでは、式が変換先の型の範囲外の値を生成した場合に、オーバーフローが検出されません。In an unchecked context, if an expression produces a value that is outside the range of the destination type, the overflow is not flagged. たとえば、次の例では、unchecked ブロックまたは式で計算が行われるため、結果が integer に対して大きすぎるという事実が無視され、int1 には-2,147,483,639 の値が割り当てられます。For example, because the calculation in the following example is performed in an unchecked block or expression, the fact that the result is too large for an integer is ignored, and int1 is assigned the value -2,147,483,639.

unchecked
{
    int1 = 2147483647 + 10;
}
int1 = unchecked(ConstantMax + 10);

unchecked 環境が削除されると、コンパイル エラーが発生します。If the unchecked environment is removed, a compilation error occurs. 式のすべての用語が定数なので、コンパイル時にはオーバーフローを検出できます。The overflow can be detected at compile time because all the terms of the expression are constants.

非定数の用語を含む式は、実行時およびコンパイル時に既定ではチェックされません。Expressions that contain non-constant terms are unchecked by default at compile time and run time. checked 環境を有効にする方法については、「checked」をご覧ください。See checked for information about enabling a checked environment.

オーバーフローのチェックには時間がかかるため、オーバーフローの危険性がない状況では、unchecked コードを使用することで、パフォーマンスを改善できる可能性があります。Because checking for overflow takes time, the use of unchecked code in situations where there is no danger of overflow might improve performance. ただし、オーバーフローの可能性がある場合は、checked 環境を使用してください。However, if overflow is a possibility, a checked environment should be used.

Example

この例では、unchecked キーワードの使用方法を示します。This sample shows how to use the unchecked keyword.

class UncheckedDemo
{
    static void Main(string[] args)
    {
        // int.MaxValue is 2,147,483,647.
        const int ConstantMax = int.MaxValue;
        int int1;
        int int2;
        int variableMax = 2147483647;

        // The following statements are checked by default at compile time. They do not
        // compile.
        //int1 = 2147483647 + 10;
        //int1 = ConstantMax + 10;

        // To enable the assignments to int1 to compile and run, place them inside 
        // an unchecked block or expression. The following statements compile and
        // run.
        unchecked
        {
            int1 = 2147483647 + 10;
        }
        int1 = unchecked(ConstantMax + 10);

        // The sum of 2,147,483,647 and 10 is displayed as -2,147,483,639.
        Console.WriteLine(int1);


        // The following statement is unchecked by default at compile time and run 
        // time because the expression contains the variable variableMax. It causes  
        // overflow but the overflow is not detected. The statement compiles and runs.
        int2 = variableMax + 10;

        // Again, the sum of 2,147,483,647 and 10 is displayed as -2,147,483,639.
        Console.WriteLine(int2);

        // To catch the overflow in the assignment to int2 at run time, put the
        // declaration in a checked block or expression. The following
        // statements compile but raise an overflow exception at run time.
        checked
        {
            //int2 = variableMax + 10;
        }
        //int2 = checked(variableMax + 10);

        // Unchecked sections frequently are used to break out of a checked 
        // environment in order to improve performance in a portion of code 
        // that is not expected to raise overflow exceptions.
        checked
        { 
            // Code that might cause overflow should be executed in a checked
            // environment.
            unchecked
            { 
                // This section is appropriate for code that you are confident 
                // will not result in overflow, and for which performance is 
                // a priority.
            }
            // Additional checked code here. 
        }
    }
}

C# 言語仕様C# Language Specification

詳細については、「C# 言語の仕様」を参照してください。 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。

関連項目See Also

C# リファレンスC# Reference
C# プログラミング ガイドC# Programming Guide
C# のキーワードC# Keywords
Checked と UncheckedChecked and Unchecked
checkedchecked