
Jason Baker
Warum genau wird also immer empfohlen, const so oft wie möglich zu verwenden? Es scheint mir, dass die Verwendung von const in C++ eher ein Schmerz als eine Hilfe sein kann. Aber andererseits komme ich hier aus der Python-Perspektive: Wenn Sie nicht möchten, dass etwas geändert wird, ändern Sie es nicht. Nachdem dies gesagt wurde, hier ein paar Fragen:
-
Es scheint, als ob ich jedes Mal, wenn ich etwas als konstant markiere, eine Fehlermeldung erhalte und irgendwo eine andere Funktion ändern muss, um auch konstant zu sein. Das führt dann dazu, dass ich umsteigen muss Ein weiterer woanders funktionieren. Ist das etwas, das mit der Erfahrung immer einfacher wird?
-
Sind die Vorteile der Verwendung von const Ja wirklich genug, um den Ärger zu kompensieren? Wenn Sie nicht beabsichtigen, ein Objekt zu ändern, warum schreiben Sie dann nicht einfach Code, der es nicht ändert?
Ich sollte anmerken, dass ich mich zu diesem Zeitpunkt am meisten auf die Vorteile der Verwendung von const für Korrektheits- und Wartbarkeitszwecke konzentriere, obwohl es auch schön ist, eine Vorstellung von den Auswirkungen auf die Leistung zu haben.

Jordan Parmer
Dies ist der definitive Artikel über “konstante Korrektheit”: https://isocpp.org/wiki/faq/const-correctness.
Kurz gesagt, die Verwendung von const ist eine gute Übung, weil …
- Es schützt Sie vor versehentlicher Änderung von Variablen, die nicht geändert werden sollen,
- Es schützt Sie vor versehentlichen Variablenzuweisungen und
-
Der Compiler kann es optimieren. Sie sind zum Beispiel davor geschützt
if( x = y ) // whoops, meant if( x == y )
Gleichzeitig kann der Compiler effizienteren Code generieren, da er jederzeit genau weiß, welchen Zustand die Variable/Funktion haben wird. Wenn Sie engen C++-Code schreiben, ist dies gut.
Sie haben Recht damit, dass es schwierig sein kann, const-correctness konsistent zu verwenden, aber der Endcode ist präziser und sicherer zu programmieren. Wenn Sie viel in C++ entwickeln, zeigen sich die Vorteile schnell.

Doug T.
Hier ist ein Stück Code mit einem häufigen Fehler, vor dem Sie die const-Korrektheit schützen kann:
void foo(const int DEFCON)
{
if (DEFCON = 1) //< FLAGGED AS COMPILER ERROR! WORLD SAVED!
{
fire_missiles();
}
}

Chris Mayer
Es scheint, als ob ich jedes Mal, wenn ich etwas als konstant markiere, eine Fehlermeldung erhalte und irgendwo eine andere Funktion ändern muss, um auch konstant zu sein. Dies führt dann dazu, dass ich an anderer Stelle eine andere Funktion ändern muss. Ist das etwas, das mit der Erfahrung immer einfacher wird?
Erfahrungsgemäß ist dies ein totaler Mythos. Es passiert, wenn nicht konstant korrekter Code mit konstant korrektem Code zusammenhängt, sicher. Wenn Sie von Anfang an const-correct entwerfen, sollte dies NIE ein Problem sein. Wenn Sie etwas konstant machen und dann etwas anderes nicht kompiliert, sagt Ihnen der Compiler etwas extrem Wichtiges, und Sie sollten sich die Zeit nehmen, es zu beheben richtig.
Wenn Sie const rigoros verwenden, werden Sie überrascht sein, wie wenige echte Variablen in den meisten Funktionen vorhanden sind. Oft nicht mehr als ein Schleifenzähler. Wenn Ihr Code diesen Punkt erreicht, bekommen Sie ein warmes Gefühl im Inneren … Validierung durch Kompilierung … das Reich der funktionalen Programmierung ist nah … Sie können es jetzt fast berühren …
Es ist nicht für Sie, wenn Sie den Code anfänglich schreiben. Es ist für jemand anderen (oder Sie ein paar Monate später), der sich die Methodendeklaration innerhalb der Klasse oder Schnittstelle ansieht, um zu sehen, was sie tut. Ein Objekt nicht zu modifizieren ist eine wichtige Information, die man daraus ziehen kann.

John McG
const ist ein Versprechen, das Sie als Entwickler abgeben und bei dessen Durchsetzung die Hilfe des Compilers in Anspruch nehmen.
Meine Gründe für die Const-Korrektur:
- Es teilt den Clients Ihrer Funktion mit, dass Sie die Variable oder das Objekt nicht ändern werden
- Das Akzeptieren von Argumenten als const-Referenz gibt Ihnen die Effizienz der Referenzübergabe mit der Sicherheit der Wertübergabe.
- Wenn Sie Ihre Schnittstellen als konstant korrekt schreiben, können Clients sie verwenden. Wenn Sie Ihre Schnittstelle so schreiben, dass sie nicht-const-Referenzen aufnimmt, müssen Clients, die const verwenden, constness wegwerfen, um mit Ihnen zu arbeiten. Dies ist besonders ärgerlich, wenn Ihre Schnittstelle nicht-konstante Zeichen* akzeptiert und Ihre Clients std::strings verwenden, da Sie von ihnen nur ein konstantes Zeichen* erhalten können.
- Die Verwendung von const wird den Compiler dazu bringen, Sie ehrlich zu halten, damit Sie nicht versehentlich etwas ändern, das sich nicht ändern sollte.

andreas buykx
C++ ohne const zu programmieren ist wie Fahren ohne angelegten Sicherheitsgurt.
Es ist mühsam, den Sicherheitsgurt jedes Mal anzulegen, wenn Sie ins Auto steigen, und an 364 von 365 Tagen werden Sie sicher ankommen.
Der einzige Unterschied besteht darin, dass Sie es sofort spüren, wenn Sie Probleme mit Ihrem Auto haben, während Sie bei der Programmierung ohne const möglicherweise zwei Wochen lang suchen müssen, was diesen Absturz verursacht hat, nur um herauszufinden, dass Sie versehentlich ein Funktionsargument vermasselt haben Sie haben aus Effizienzgründen eine nicht konstante Referenz übergeben.
9887400cookie-checkVerkaufen Sie mich auf const Korrektheityes
8 Jahre alte Retrospektive, aber.. Wie wäre es, wenn Sie Ihren Code 100x beschleunigen (live gesehen)?
– Lorro
29. Juli 2016 um 10:07 Uhr