Thema: Label[i]

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#16

AW: Label[i]

  Alt 3. Apr 2018, 13:31
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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 3. Apr 2018 um 13:34 Uhr)
  Mit Zitat antworten Zitat