Diese Frage ist inspiriert von einer Frage über final
in Java .
Sollte ich in C / C ++ const
wann immer möglich verwenden?
Ich weiß, dass es bereits eine verwandte Frage zur Verwendung const
in Parametern gibt . Leider beantworten diese Frage und ihre Antworten meine Frage nicht vollständig, da es sich nur um Funktionsparameter handelt, aber ich würde auch gerne andere Fälle kennenlernen (z. B. lokale Variablen).
Außerdem sagen fast alle Antworten auf diese Frage, dass wir sie verwenden sollten, const
da sie nützliche Informationen über die Zugänglichkeit von Variablen enthalten. Dies scheint jedoch im Widerspruch zu einer Antwort über die Verwendung von final in Java zu stehen, deren Zustände final
möglicherweise überflüssig sind, wenn sie keine zusätzlichen Informationen enthalten. Daher sollte sie weggelassen werden, um den Code kurz und sauber zu halten.
Also, sollte ich const
wann immer möglich verwenden? Wenn ja, warum unterscheidet sich der Rat für const
in C ++ von dem Rat für final
in Java?
quelle
final
undconst
nicht die gleichen Garantien haben.Persönlich
const
brauche ich sehr wenig Zeit zum Schreiben und sehr wenig Zeit zum Lesen, normalerweise viel weniger als zum Überprüfen, ob ein Code die Variable mutiert, und es hindert mich tatsächlich daran, Fehler zu schreiben (hat jemand jemals versehentlich seinen Enditerator erhöht? Usw)Ich finde auch, dass mich die strikte Verwendung von const auf andere Weise zu besserem Code führt, z. B. zum Erstellen von Hilfsfunktionen für nicht triviale Initialisierungen.
quelle
Ich werde mit den anderen Postern nicht einverstanden sein und empfehlen, keine Top-Level
const
für lokale Variablen und Parameter zu verwenden. (Verweise und Verweise auf const, dhconst T&
, sind unterschiedlich, und Sie sollten sie jederzeit zur Richtigkeit verwenden, wenn dies angemessen ist.)Die Vorteile von Top-Level
const
sind:Die Nachteile sind:
Kann nicht für "Pseudo-Const" -Variablen verwendet werden, dh Variablen, die auf eine Weise komplizierter als die direkte Konstruktion initialisiert werden, aber danach nicht geändert werden, z. B
getline
.:Verhindert die Auszugsoptimierung bei Funktionsaufruf und Rückgabe:
Ich habe an einer Codebasis gearbeitet, in der local häufig
const
verwendet wurde, und fand sie überhaupt nicht hilfreich, aber sie füllte den Code wie oben mit subtilen Pessimisierungen. Ich persönlich bevorzuge eine allgemeine Richtlinie, bei der Variablen so selten wie möglich geändert werden und Funktionen so klein gemacht werden, dass die Verwendung einer Variablen offensichtlich ist, und selbst wenn sie geändert wird, ist die Komplexität der Funktion gering genug, um sie zu einer Nicht-Funktion zu machen -Problem.quelle
const
auf Einheimische: weil es technische Änderungen verhindert, nicht nur konzeptionelle Änderungen.Das
const
Schlüsselwort sollte genau wie Parameter für lokale Variablen verwendet werden. Es ist nützlich, weil:const
sollte nur eine Sekunde dauern , um zu schreiben, also ist es keine große Sache.Beachten Sie, dass es hier keine richtige / falsche Antwort gibt. In Ihrem Link sollte der Antwortende, der die meisten positiven Stimmen erhalten hat,
final
nicht lokal verwendet werden. Der nächste Antwortende empfahl es jedoch nachdrücklich.Wenn Ihre Funktion einfach und trivial ist , sollten Sie sie nicht hinzufügen,
const
da jeder Ihre Absicht versteht. Wenn die Logik in Ihrer Funktion jedoch nicht trivial ist, sollten Sie das Schlüsselwort verwenden. Denken Sie daran, es gibt wenig zu verlieren.quelle