AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Code Optimisation: Benutzung von const in prozedur-Köpfen
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von SneakyBagels · begonnen am 8. Jun 2017 · letzter Beitrag vom 3. Aug 2018
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
SneakyBagels
(Gast)

n/a Beiträge
 
#1

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

  Alt 8. Jun 2017, 11:17
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?
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#2

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

  Alt 8. Jun 2017, 11:28
https://www.delphitools.info/2010/07...nst-parameters
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

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

  Alt 8. Jun 2017, 11:30
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.
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

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

  Alt 8. Jun 2017, 11:41
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;
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

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

  Alt 8. Jun 2017, 12:16
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
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#6

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

  Alt 8. Jun 2017, 12:19
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?
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.142 Beiträge
 
Delphi 10.3 Rio
 
#7

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

  Alt 8. Jun 2017, 12:26
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
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

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

  Alt 8. Jun 2017, 12:39
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.
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#9

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

  Alt 8. Jun 2017, 12:41
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

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.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.142 Beiträge
 
Delphi 10.3 Rio
 
#10

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

  Alt 8. Jun 2017, 12:49
Ich denke Const ist nicht nur für die Performance, sondern auch (für mich) so einen Art Flag...

Signalisiert mir 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...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:45 Uhr.
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