![]() |
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? |
AW: Code Optimisation: Benutzung von const in prozedur-Köpfen
|
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.
|
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; |
AW: Code Optimisation: Benutzung von const in prozedur-Köpfen
Zitat:
|
AW: Code Optimisation: Benutzung von const in prozedur-Köpfen
Zitat:
|
AW: Code Optimisation: Benutzung von const in prozedur-Köpfen
Zitat:
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 |
AW: Code Optimisation: Benutzung von const in prozedur-Köpfen
Zitat:
|
AW: Code Optimisation: Benutzung von const in prozedur-Köpfen
Zitat:
Zitat:
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. |
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:
ändert nix an dem was ich Übergebe...
Procedure Foo(Const AValue : Integer)
Genauso wie OUT klar kann man Var nehmen aber das verhalten wird eindeutiger... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz