System.SysUtils.ERangeError
Delphi
ERangeError = class(EIntError);
C++
class PASCALIMPLEMENTATION ERangeError : public EIntError
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
class | public | System.SysUtils.pas System.SysUtils.hpp |
System.SysUtils | System.SysUtils |
説明
ERangeError は、整数の範囲違反を示します。
ERangeError は、Delphi コードで範囲チェックが有効になっていて、順序値が宣言された範囲からはみ出した場合に発生します。 デフォルトで、Delphi コンパイラの範囲チェックは無効になっています。 明らかな範囲エラーはコンパイラで常に検出できるため、次のコードはコンパイルが成功しません。
メモ: 範囲チェックは C++ の機能に含まれません。 ただし、C++ コードで Delphi コードを呼び出している場合には、ERangeError が発生する可能性があります。
例 1(コンパイル時のチェック):
var
SmallValue: 1 .. 3;
SevenBits: byte;
begin
SmallValue := 4; // E1012 Constant expression violates subrange bounds
SevenBits := 256; // E1012 Constant expression violates subrange bounds
// ...
範囲外の値が実行時に渡されることをコンパイラが予想することはできません。
例 2(実行時のチェック):
var
SmallValue: 1 .. 3;
SevenBits: byte;
ThirtyTwoBits: Integer;
begin
ThirtyTwoBits := 4;
SmallValue := ThirtyTwoBits; // Assigns 4 to SmallValue (SmallValue is stored as a Byte)
ThirtyTwoBits := 256;
SevenBits := ThirtyTwoBits; // Assigns 0 to SevenBits (high-order bits discarded)
// ...
例 2 で範囲チェックを有効にすると、範囲外の値を代入している両方の箇所で ERangeError 例外が送出されます。
範囲チェックを有効にするには、IDE のプロジェクト オプションか、$R+ 指令を使用します。
範囲チェックはデバッグ機能と見なされています。 範囲チェックを有効にすると、実行可能ファイルのサイズが大きくなり、実行速度が低下します。