Ich verstehe die Bedeutung von const
für Zeiger oder Strukturen, die durch Verweis auf eine Funktion übergeben werden müssen. Im Beispiel jedoch:
Die Variable a
wird auf dem Stack übergeben. Es gibt keinen Schaden für den Aufrufer, den Inhalt des Stapels zu ändern, so dass const
in dieser Situation ziemlich nutzlos aussieht.
Außerdem kann ich, wenn ich a
nicht ändern kann, immer noch eine Kopie von a machen und diese Kopie ändern:
In welcher Situation ist das Schlüsselwort const
nützlich, wenn es auf ein Skalarfunktionsargument (nicht auf einen Zeiger) angewendet wird?
Code wie void foo(const int a)
ist nicht wirklich sinnvoll, noch ist es "const correctness" als solches.
Manchmal bekommen allzu pedantische Programmierer die seltsame Idee, dass sie allgemeine Parameter als const
deklarieren müssen, nur weil eine Funktion den tatsächlichen Parameter nicht verändert. Aber meistens tun Funktionen nicht.
Der Punkt ist, die Variable ist eine Kopie des Originals, also was Ihre Funktion damit macht ist egal!
Das ist also nicht einmal eine Art, selbst-dokumentierenden Code zu schreiben, weil es nur dem Anrufer mitteilt, was intern in Ihrer Funktion vor sich geht. Der Anrufer interessiert sich nicht und sollte sich nicht darum kümmern.
Es ist nicht notwendig, const für einen Wertparameter zu verwenden, aber es hat seinen Wert, wenn das, was Sie wollen, garantieren soll, dass der Code das tut, was Sie beabsichtigen.
Hier gibt es eine Antwort mit einigen Beispielen für Anwendungsfälle
Es ist das gleiche wie eine konstante Variable zu deklarieren
%Vor% Es ist eine gute Programmierpraxis, Variablen als const
zu deklarieren, wenn Sie wissen, dass sich ihre Werte nicht ändern. Auf diese Weise können Sie vermeiden, dass jemand versehentlich seinen Wert in der Funktion ändert.
Dies bedeutet, dass ein Implementierer der Funktion den Wert des Eingangsparameters a
nicht ändern kann, den die Funktion als Wert erhält.
Es kann zu einer erhöhten Programmstabilität führen.
(Persönlich mag ich den Stil nicht, weil ich es zu ausführlich finde).
Wenn Sie diesen Stil übernehmen, sollten Sie beachten, dass Sie nur den const
in die Parameterliste der Funktion definition einfügen müssen, Sie nicht in der Deklaration .
Dies ist hauptsächlich nützlich, um den Code selbst zu dokumentieren.
Damit zukünftige Personen Ihren Quellcode durchsehen können, dient const
dazu, Ihre Absicht zu unterstreichen (dass keiner der Codes in foo()
versucht, a
zu ändern).