Code: Alles auswählen
var
r: TRect;
begin
FillChar(r, SizeOf(r), $00);
Code: Alles auswählen
var
r: TRect;
begin
FillChar(r, SizeOf(r), $00);
Code: Alles auswählen
var
r: TRect;
begin
r := TRect.Empty;
Code: Alles auswählen
MyRec := Default(TMyRec);
Kann bei Default noch was anderes reinkommen, als TMyRec im obigen Beispiel ?
Code: Alles auswählen
procedure Foo(ARec: TMyRec);
...
begin
Foo(Default(TMyRec)); // wird mit Leerem MyRec aufgerufen
end.
Code: Alles auswählen
type
TMyRec = record
S: String;
end;
var
r: TMyRec;
begin
r.S:='Hello World';
UniqueString(r.S);
FillChar(r, SizeOf(r), #00); // Erzeugt memory leak
//vs
r:=Default(TMyRec); // Kein memory leak
end.
Code: Alles auswählen
procedure Test;
const
foo: TfooRec=default(TfooRec);
also für das Verständnis und die Lesbarkeit, meiner Meinung nach, nicht zu übertreffen!Mathias hat geschrieben: Sa 19. Okt 2024, 13:41 Gibt es unterdessen etwas eleganteres, um alles Elemente eines Recordes auf 0 zu setzen ?Code: Alles auswählen
var r: TRect; begin FillChar(r, SizeOf(r), $00);
Ich mein es ist halt in vielen Fällen falsch, und da es ein statement ist und keine Expression nicht so vielseitig einsetzbar wie Default. Beispiel:six1 hat geschrieben: Mo 9. Dez 2024, 12:55 also für das Verständnis und die Lesbarkeit, meiner Meinung nach, nicht zu übertreffen!
Code: Alles auswählen
generic function Foo<T>(AValue: T): T;
...
specialize Foo<TMyType>(default(TMyType));
Fillchar ist eine eins zu eins Kopie der C funktion memset. Default als konstrukt gibt es in C nicht.
Ich muss leider sagen, es gibt viele Sachen, da hat C die Nase vorn.six1 hat geschrieben: Mo 9. Dez 2024, 12:55also für das Verständnis und die Lesbarkeit, meiner Meinung nach, nicht zu übertreffen!Mathias hat geschrieben: Sa 19. Okt 2024, 13:41 Gibt es unterdessen etwas eleganteres, um alles Elemente eines Recordes auf 0 zu setzen ?Code: Alles auswählen
var r: TRect; begin FillChar(r, SizeOf(r), $00);
alles andere ist dann wieder so C-artig +~#'!§$
Code: Alles auswählen
// In einer Unit
type
TRect = record
x, y, w, h: integer;
end;
const
ZERO_RECT: TRect = (x: 0; y: 0; w: 0; h: 0);
// Im Hauptprogramm
procedure foo;
const
r: TRect = ZERO_RECT;
begin
end;
Code: Alles auswählen
myStruct s = {.x=42, .y=3.14};
Code: Alles auswählen
rec: TMyRec = (x:42,;y:3.14);
Code: Alles auswählen
if (cond)
s = {.x=42,.y=3.14};
else
s = {.x=32,.y=2.71};
Code: Alles auswählen
rec := Default(TMyRec;X:42;Y:3.14);
Code: Alles auswählen
s = {.x=42,.y=3.14};
Code: Alles auswählen
s = {42, 3.14};