そこにあるのは型付き定数です。型付き定数は、通常の定数(別名真の定数) とは異なりますconstVar
。に型を指定する必要がないことに注意してくださいconstVar
。持っていた場合は、コンパイラーが新しい値をそれに割り当てることもできることがわかります。
const
constVar: Integer = 1;
Free Pascal のマニュアルでは、型付き定数について説明しています。
通常の定数とは異なり、実行時に値を割り当てることができます。これは、初期化された変数のサポートに置き換えられた Turbo Pascal の古い概念です。詳細な説明については、セクション4.4の183ページを参照してください。
型付き定数への値の割り当てのサポートは、{$J}
ディレクティブによって制御されます。オフに切り替えることもできますが、デフォルトではオンになっています (Turbo Pascal との互換性のため)。初期化された変数は常に許可されます。
初期化された変数の場合、宣言でconst
に置き換えます。var
スコープに入るとその値を取得します。$J
または、型付き定数宣言の前にディレクティブをオフにします。
{$J-}
const
constArr: array [1..3] of ShortInt = (1, 2, 3);
{$J+}
後でオンに戻すかどうかはあなた次第です。
型付き定数は、メモリに格納される方法により変更可能です。実際、それらが元々変更可能だったのは、それらがメモリに格納されているためです。通常の定数は、個別のオブジェクトとしてメモリに格納されません。コンパイラは、プログラムで使用されている通常の定数に遭遇すると、その場所にリテラルを使用したかのように、インラインで定数の値に置き換えます。一方、型付き定数はメモリ内の独自の場所に常駐し、コード内で型付き定数を参照すると、他の変数を使用する場合と同様に、その値がメモリから読み取られます。リテラルに使用できる構文がない場合は、型付き定数を使用します。たとえば、配列リテラルやレコード リテラルを使用することはできません。