C++ Lernen - Verständnisfragen
-
@DocShoe sagte in C++ Lernen - Verständnisfragen:
Bei kleinen Übungsaufgaben ist das egal, aber bei größeren Projekten möchte man auf Funktionen, die ihre Aufgabe durch Seiteneffekte erfüllen, lieber nicht haben.
Das Wort Seiteneffekte ist hier fehl am Platz, da nur die übergebenen Werte verändert werden und nichts anderes. Von Seiteneffekten spricht man üblicherweise, wenn etwas anderes verändert als die Parameter der Funktion wird z.B. globale Variablen. Womit wir beim Thema Benennung von Funktionen angelangt wären. Der Funktionsname sollte klar beschreiben was die Funktion macht.
-
@Drgreentom Generell würde ich dir noch raten, möglichst viel
const
zu verwenden. Wenn sich Variablen nicht ändern, ist es einfacher zu sehen, wofür die Variablen stehen. Vor allem nicht: "hier in Zeile 1 stehtx
für diese Daten, in Zeile 10 stehtx
für diese anderen Daten".Durch
const
vermeidest du das. Da du eineconst
-Variable aber nicht ändern kannst, funktioniert logischerweise auch der call-by-reference nicht zum Ändern der Variable. Du müsstest eineconst&
als Parameter nehmen und könntest somit die Variable in der Funktion auch nicht ändern. Wenn du aber stattdessen einfach eine neuen Wert zurückgibst, der sich aus altem const-Wert + Änderung ergibt, dann hast du dieses Problem nicht und dein Programm wird tendenziell klarer.Natürlich muss man schauen, ob das so immer sinnvoll ist. Wenn du große Objekte hast, ist es möglicherweise ineffizient, immer zu kopieren und eine direkte Änderung kann dann sinnvoller sein.
Jedenfalls: sofern nichts dagegen spricht, bevorzuge const-Variablen und return-Werte anstelle von Reference-Parametern ohne
const
.
-
@wob sagte in C++ Lernen - Verständnisfragen:
Generell würde ich dir noch raten, möglichst viel const zu verwenden. Wenn sich Variablen nicht ändern, ist es einfacher zu sehen, wofür die Variablen stehen. Vor allem nicht: "hier in Zeile 1 steht x für diese Daten, in Zeile 10 steht x für diese anderen Daten".
Durch const vermeidest du das. Da du eine const-Variable aber nicht ändern kannst, funktioniert logischerweise auch der call-by-reference nicht zum Ändern der Variable. Du müsstest eine const& als Parameter nehmen und könntest somit die Variable in der Funktion auch nicht ändern. Wenn du aber stattdessen einfach eine neuen Wert zurückgibst, der sich aus altem const-Wert + Änderung ergibt, dann hast du dieses Problem nicht und dein Programm wird tendenziell klarer.
Natürlich muss man schauen, ob das so immer sinnvoll ist. Wenn du große Objekte hast, ist es möglicherweise ineffizient, immer zu kopieren und eine direkte Änderung kann dann sinnvoller sein.
Jedenfalls: sofern nichts dagegen spricht, bevorzuge const-Variablen und return-Werte anstelle von Reference-Parametern ohne const.Danke nochmal für den Hinweis, ich versuch das mit den const Variablen bereits zu beachten. Gerade Vectoren die viele Strings enthalten (z.b. eingelesene Dateien) habe ich fast immer als const referenz aufgerufen um mir das Kopieren zu sparen - sofern nur gelesen werden sollte. By Value habe ich bisher sogut wie nie genutzt. Jedoch gerade der letzte Punkt war auch aus den letzten Antworten der entscheidene Hinweis, für meine nächsten Projekte - jetzt wo ich das mit dem Return verstanden habe