In den letzten Wochen habe ich viel const
überall benutzt. Nicht nur in Methoden- oder Argumentdeklarationen, sondern auch für temporäre Variablen.
Lassen Sie mich das mit einer einfachen Funktion veranschaulichen.
Ich habe geschrieben:
%Vor%Aber jetzt ist es eher wie folgt:
%Vor% Letzteres ergibt für mich mehr Sinn und scheint weniger fehleranfällig zu sein. (Ich gebe zu, dass es in diesem Beispiel nicht wirklich wichtig ist) Allerdings habe ich sehr wenige Code-Beispiele gesehen, in denen const
für temporäre / lokale Variablen verwendet wurde. Und ich würde gerne verstehen warum.
Gibt es einen Grund, warum dies nicht der Fall ist? Missbrauche ich mit meiner Verwendung von const
? Oder ist es nur ich, der sich die falschen Proben angesehen hat?
Die Verwendung von const
auf lokalen Variablen verbessert die Code-Klarheit, also ist es eine gute Idee. Sie sehen const
und Sie wissen sofort, dass die Variable später im Bereich nie geändert wird. Es ist aus der gleichen Serie wie Funktionen kurz und früh zurück .
Entwickler sind faul - sie denken oft, dass es ein nutzloses Wort ist, das nichts ändert. IMO sie sind falsch.
Dies ist effektiv der gleiche Grund, warum Behauptungen selten verwendet werden. const
auf Schnittstellen ist obligatorisch, const
in der Implementierung ist freiwillig. Programmierer sind faul.
Edit: nur für den Fall, dass es nicht klar ist, ist Ihre Vorgehensweise besser.
Ich würde persönlich sagen, dass es nie zu viele const
gibt, und ich verwende sie reichlich für lokale Variablen. Der einzige Kontext, in dem ich konnte hinzufügen const
, aber nicht auf Parameter von integrierten Typen:
void foo (const int);
Hier glaube ich (aber das ist eine Frage des persönlichen Geschmacks wirklich), dass es nutzlos die Schnittstelle verstopft.
Ich glaube nicht, dass es nur ein Fall von Programmierern ist, die faul sind - auch die Präzision ist eine Überlegung. Manche Leute finden int x;
weniger mentale Belastung als "const int x;" wenn man die Funktionen überprüft: das bisschen mehr Platz könnte ihnen helfen, einen passenden Kommentar zu finden. Ich erwähne das nicht als Empfehlung, sondern weil ich denke, dass es wichtig ist, alle "Kosten" zu verstehen, die die Einstellung der Menschen beeinflussen, da es wirklich verwirrend ist, dass die Menschen hier nicht konsequent konsistent sind.
Es ist auch interessant zu bedenken, dass es bei der Verwendung einer Variablen in einer Funktion irgendwann notwendig werden kann, sie zu optimieren. Zum Beispiel, Sie berechnen etwas, aber dann gehen Sie in ein paar if-Anweisungen und Dinge und es gibt einige Randfall, wo Sie ein nachstehendes Element aus einer Zeichenfolge entfernen müssen, behandeln Sie ein Einzel-Problem, löschen Sie den Wert usw. Wenn Sie die Variable const ursprünglich erstellt haben, wird Ihr Arbeitsablauf mehr unterbrochen, um zu const zurückzukehren und const aus der Definition zu entfernen, und den Cursor dann an die Stelle zurückversetzen, an der Sie arbeiten. Dem entgegenzuwirken, ist eine Angewohnheit, const, wo möglich, zu verwenden, eine rote Flagge, die einige solcher Optimierungen im Funktionskörper versteckt, und sehr nützlich für das spätere Verständnis und die Wartung.
Dennoch ermutige ich Sie aktiv, const weiter zu verwenden: Normalerweise tue ich das und betrachte es als Best Practice. Die Gründe dafür sind offensichtlich von Ihnen verstanden und wurden in anderen Antworten aufgezählt.
In C ++ ist dies ein guter Ansatz, Variablen zu konstruieren, wenn Sie können. Aber nachdem dies gesagt wurde, macht dies mehr Sinn, wenn eine Variable entweder als Argument übergeben wird oder zwischen verschiedenen Teilen des Codes (wie Klassenvariablen) geteilt wird. Die Hauptidee besteht darin, die versehentliche Änderung von Variablen durch anderen Code zu stoppen, der nicht weiß, dass diese Variable nicht geändert werden soll.
Daher ist es im Hinblick auf das Obige für Variablen, die für eine Funktion lokal sind, eine Art Overkill zu bilden. Dies schadet jedoch nichts.
Nach meiner bescheidenen Meinung sollten Sie den Compiler einer stark typisierten Sprache bei jeder Gelegenheit nutzen. Ich verwende const
für temporäre, lokale Variablen, unveränderliche Referenzen, etc.
Die Const Korrektheit C ++ FAQ könnte nützlichere Informationen enthalten.