Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Code Optimisation: Benutzung von const in prozedur-Köpfen (https://www.delphipraxis.net/192983-code-optimisation-benutzung-von-const-prozedur-koepfen.html)

SneakyBagels 8. Jun 2017 10:17

Code Optimisation: Benutzung von const in prozedur-Köpfen
 
Kürzlich habe ich irgendwo nebenbei gefragt, was const in Prozedurköpfen bringt.
Geantwortet wurde, dass der Code dadurch wohl optimierter sei.

Kann man also festhalten, dass wenn ich die Parameter nicht innerhalb der Prozedur veränderte, ich überall const verwenden kann?
Für Integer, Boolean, Strings und Typen?

TiGü 8. Jun 2017 10:28

AW: Code Optimisation: Benutzung von const in prozedur-Köpfen
 
https://www.delphitools.info/2010/07...nst-parameters

Namenloser 8. Jun 2017 10:30

AW: Code Optimisation: Benutzung von const in prozedur-Köpfen
 
Ja, kannst du. Es schadet zumindest nicht. Bei Typen wie Integer, Char, Boolean etc. macht es aber in der Praxis keinen Unterschied, da eh immer der Wert kopiert wird. Bei größeren Typen wie Records kann const einiges ausmachen, weil dann nur noch ein Pointer übergeben wird, was schneller ist, als den ganzen Record zu kopieren. Und bei referenzgezählten Typen wie Strings spart man sich durch const ein addref und ein release.

bra 8. Jun 2017 10:41

AW: Code Optimisation: Benutzung von const in prozedur-Köpfen
 
Ganz so trivial ist es aber leider auch nicht. Wenn du z.B. eine Klasse als const-Parameter übergibst, kannst du nur den Pointer nicht ändern, den Inhalt aber schon. Ich bin da auch schon drüber gestolpert, weil ich es von C++ anders kannte.

Auch führt folgendes zu m.E. seltsamen Ergebnissen:

Delphi-Quellcode:
var FString: String = 'Test';

procedure Change(const AString: String);
begin
  FString := 'Blubb';
  ShowMessage(AString);
end;

procedure CallMe;
begin
  Change(FString);
  Change(FString);
end;

Der schöne Günther 8. Jun 2017 11:16

AW: Code Optimisation: Benutzung von const in prozedur-Köpfen
 
Zitat:

Zitat von bra (Beitrag 1373825)
Ich bin da auch schon drüber gestolpert, weil ich es von C++ anders kannte.

Oh ja, die const correctness ist auch mein Nummer 1-Feature das ich aus C++ vermisse

SneakyBagels 8. Jun 2017 11:19

AW: Code Optimisation: Benutzung von const in prozedur-Köpfen
 
Zitat:

Zitat von bra (Beitrag 1373825)
Delphi-Quellcode:
var FString: String = 'Test';

procedure Change(const AString: String);
begin
  FString := 'Blubb';
  ShowMessage(AString);
end;

procedure CallMe;
begin
  Change(FString);
  Change(FString);
end;

Da frage ich mich.... wer baut so einen Unsinn?

Mavarik 8. Jun 2017 11:26

AW: Code Optimisation: Benutzung von const in prozedur-Köpfen
 
Zitat:

Zitat von SneakyBagels (Beitrag 1373839)
Zitat:

Zitat von bra (Beitrag 1373825)
Delphi-Quellcode:
var FString: String = 'Test';

procedure Change(const AString: String);
begin
  FString := 'Blubb';
  ShowMessage(AString);
end;

procedure CallMe;
begin
  Change(FString);
  Change(FString);
end;

Da frage ich mich.... wer baut so einen Unsinn?

Jo... Wenn ich einen Referenz als Const übergebe und dann ne "GLOBALE" Variable intern ändere, muss ich mich nicht wundern...
Wie macht das den C? Den Zugriff auf die Globale Variable verhindern, weil das zufällig die gleiche Referenz ist?
Fehlermeldung beim compilieren? Oder etwa zur Laufzeit?

Mavarik

bra 8. Jun 2017 11:39

AW: Code Optimisation: Benutzung von const in prozedur-Köpfen
 
Zitat:

Zitat von SneakyBagels (Beitrag 1373839)
Da frage ich mich.... wer baut so einen Unsinn?

Das war eigentlich nur ein Test, einen ähnlichen Code hatte ich irgendwo im Bezug auf diese Delphi-const-Geschichte gefunden. Dass der Code so Käse ist, ist mir schon klar. Seltsam ist nur das Ergebnis, da wird nämlich beim zweiten Aufruf ein Leerstring ausgegeben.

SneakyBagels 8. Jun 2017 11:41

AW: Code Optimisation: Benutzung von const in prozedur-Köpfen
 
Zitat:

Wie macht das den C? (...) Fehlermeldung beim compilieren?
Eine Fehlermeldung beim Kompilieren wäre in zukünftigen Versionen von Delphi vielleicht nicht schlecht.

Zitat:

Das war eigentlich nur ein Test
Das weiß ich, keine Sorge :P

Ich handhabe es immer so, dass ich nur Variablen/Typen etc übergebe bei denen ich ganz genau weiß, dass ich diese in der Prozedur / Funktion nur lese und nicht schreibe.
Dann sollte eigentlich nichts schiefgehen.
Auch nutze ich das nur bei String und Typen. Zahlenwerte und Booleans ignoriere ich.

Mavarik 8. Jun 2017 11:49

AW: Code Optimisation: Benutzung von const in prozedur-Köpfen
 
Ich denke Const ist nicht nur für die Performance, sondern auch (für mich) so einen Art Flag...

Signalisiert mir
Delphi-Quellcode:
Procedure Foo(Const AValue : Integer)
ändert nix an dem was ich Übergebe...
Genauso wie OUT klar kann man Var nehmen aber das verhalten wird eindeutiger...


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:31 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz