Was Sie dort haben, ist eine typisierte Konstante. Typisierte Konstanten unterscheiden sich von gewöhnlichen Konstanten (a.k.a. wahre Konstanten), die Ihre constVar
ist. Beachten Sie, dass Sie keinen Typ unter constVar
angeben mussten. wenn Sie hatten, können Sie sehen, dass der Compiler zugewiesen neue Werte erlaubt es, auch:
const
constVar: Integer = 1;
The Free Pascal manual beschreibt typisierte Konstanten:
Im Gegensatz zu gewöhnlichen Konstanten kann ein Wert zugewiesen werden sie zur Laufzeit. Dies ist ein altes Konzept von Turbo Pascal, das durch die Unterstützung initialisierter Variablen ersetzt wurde: Eine detaillierte Beschreibung finden Sie in Abschnitt 4.4, Seite 183.
Die Unterstützung für die Zuweisung von Werten zu typisierten Konstanten wird durch die Direktive {$J}
gesteuert: Sie kann ausgeschaltet werden, ist aber standardmäßig aktiviert (für Turbo Pascal-Kompatibilität). Initialisierte Variablen sind immer erlaubt.
Für eine initialisierte Variablen ersetzen const
mit var
in Ihrer Erklärung. Es wird seinen Wert bei Eingabe des Umfangs erhalten. Oder schalten Sie den $J
Richtlinie vor dem typisierten-Konstante Erklärung ab:
{$J-}
const
constArr: array [1..3] of ShortInt = (1, 2, 3);
{$J+}
Ob Sie es wieder einschalten danach bleibt Ihnen überlassen.
Typisierte Konstanten können geändert werden, da sie im Speicher abgelegt sind. In der Tat ist es weil sie im Speicher gespeichert sind, dass sie ursprünglich änderbar waren. Gewöhnliche Konstanten werden nicht im Speicher als unterschiedliche Objekte gespeichert. Wenn der Compiler auf eine gewöhnliche Konstante trifft, die in Ihrem Programm verwendet wird, ersetzt er sie inline mit dem Wert der Konstanten, als ob Sie stattdessen ein Literal verwendet hätten. Eine typisierte Konstante hingegen befindet sich an ihrem eigenen Ort im Speicher, und wenn Sie im Code auf einen verweisen, wird ihr Wert wie bei jeder anderen Variablen aus dem Speicher gelesen. Sie verwenden typisierte Konstanten, wenn für ein Literal keine Syntax verfügbar ist - Sie können beispielsweise keine Array- oder Datensatzliterale verwenden.
Siehe auch http://stackoverflow.com/questions/48934/in-delphi-7-why-can-i-assign-a-value-to-a-const und http://stackoverflow.com/questions/2714365/delphi-all-constants-sind-konstant-aber-einige-sind-mehr-konstant-als-andere. –