Was macht const in void foo (const int a)? [Duplikat]

8

Ich verstehe die Bedeutung von const für Zeiger oder Strukturen, die durch Verweis auf eine Funktion übergeben werden müssen. Im Beispiel jedoch:

%Vor%

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:

%Vor%

In welcher Situation ist das Schlüsselwort const nützlich, wenn es auf ein Skalarfunktionsargument (nicht auf einen Zeiger) angewendet wird?

    
nowox 12.04.2016, 14:17
quelle

5 Antworten

4

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.

    
Lundin 12.04.2016, 14:28
quelle
3

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

    
danielfranca 12.04.2016 14:26
quelle
2

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.

    
atturri 12.04.2016 14:28
quelle
2

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 .

    
Bathsheba 12.04.2016 14:27
quelle
1

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).

    
Christian Henry 12.04.2016 14:26
quelle

Tags und Links