IS und AS sind für Klassen/Objekte. (und neuerdings auch für Interfaces).
Pointer und alle anderen Typen kann man nur Hart casten, da
in den "Daten" nirgendwo der Typ gespeichert/verlinkt wird, kann es da auch keine Laufzeitprüfung (Runtime) geben.
Dort geht halt nur zur CompileTime.
HardCast macht der Compiler (daher ist das auch ein paar Nanosekunden schneller)
und SoftCast dein Programm.
Achtung, es gibt beim Compiler ein paar Casts, die auch erst zur Laufzeit passieren.
Reine HartCasts ändern keine Daten, sondern lassen dich nur anders rauf zugreifen.
Bei WideString > AnsiString und ebenso bei Variants werden vom Compiler "Übersetungsfunktionen" aufgerufen.
Und z.B. bei Interger zu Byte, mit aktiver Bereichsprüfung, wird nach dem Cast noch ein Prüfcode eingeaut. (
if WarÜberlauf then RaiseError
)
Delphi-Quellcode:
{$RANGECHECKS ON}
EinWord := EinInteger; // knallt, wenn nicht im Bereich von 0..65535
EinWord := Word(EinInteger); // harter Cast ohne Prüfung (einfach die höheren 2 Byte wegwerfen)