Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
4. Sep 2009
das ist die strenge Typ-Prüfung von Delphi ... aber S := ''; macht ja das Selbe und rufst nur ClearString auf
PS: bei Array's geht das
statt SetLength(a, 0) einfach nur a := nil und den Rest macht die CompilerMagic und ruft sozusagen auch direkt ClearArray auf.
PS: es wird ja dennoch nicht Result := nil gesetzt, da ja auch der zugehörige Speicher freigegeben werden muß :zwinker:
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
4. Sep 2009
sagen wir es mal so
ein Leerstring entspricht bei einem String/WideString/AnsiString/UnicodeString einem NIL
(wie schon jbg sagte, ist das der Normalzustand ... und wer daran rumbastelt, hat mit den Konsequenten zu leben)
sobald Inhalt vorhanden ist, wird Speicher reserviert und er zeigt auf diesen Speicher
am Referenzzähler kann man sogar noch viel mehr erkennen ... z.B.
> ist es eine...
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
4. Sep 2009
jupp,
wenn man mal bissl böse drauf ist, kann man auch sowas machen :oops:
if BOOL(s) then Beep;
// also statt if s <> '' then Beep;
aber für sowas wäre es besser, wenn man auch weiß wie der String intern arbeitet
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
4. Sep 2009
OK, mann könnte jetzt zwar denken, daß des Auslesen des Längen-Wertes und ein Integer-Vergleich flotter wären, als ein String-Verlgeich, aber ...
if S <> '' then und if S = '' then
ist eigentlich das Schnellste, denn dieses Prüft praktisch so
if Pointer(S) <> '' then
also ein einfacher Integer-Vergleich
das Andere dagegen ruft ja sozusagen eine Inline-Funktion auf