Benutze const wo immer möglich in C ++?

9

Wie in Buch Effektives C ++ angegeben: "const wann immer möglich verwenden", würde man annehmen, dass diese Definition: Vec3f operator+(Vec3f &other); besser als Vec3f operator+(const Vec3f &other) const; oder noch besser als const Vec3f operator+(const Vec3f &other) const; definiert wäre. .

Oder ein Beispiel mit 5 const Schlüsselwörtern: const int*const Foo(const int*const&)const;

Natürlich sollten Sie const nur dort angeben, wo es einen geben kann. Was bitte ich, ist es eine gute Praxis, sie wann immer möglich zu verwenden? Während es Ihnen mehr fehlerfreien Code gibt, kann es ziemlich unordentlich werden. Oder sollten Sie zum Beispiel Zeiger und Referenz const ignorieren (außer Sie wirklich brauchen), und verwenden Sie es nur für die Typen selbst, wie in const int* Foo(const int* parameter)const; , so endet es nicht zu unordentlich?

Zusätzliche Informationen: Ссылка

Vielen Dank im Voraus!

    
user2340939 09.03.2014, 17:53
quelle

4 Antworten

4
  

C ++ - FAQ :

     

Wenn Sie normale Sicherheit finden, hilft Ihnen, Systeme richtig zu bekommen   tut; besonders in großen Systemen), finden Sie const Korrektheit   hilft auch.

Sie sollten const verwenden, wenn Sie sicherstellen möchten, dass die Variable nicht versehentlich oder absichtlich geändert wird. Einige Konstanten (globals und class static, strings & amp; integers, aber keine Variablen mit nichttrivialem Konstruktor) können in schreibgeschützte Teile der ausführbaren Datei eingefügt werden, was zu einem Segmentierungsfehler führt, wenn Sie versuchen, darauf zu schreiben.

Sie sollten explizit const als Spezifizierer für Funktionen, die diesem Prinzip folgen, sowie für Funktionsargumente verwenden. Wenn Sie das tatsächliche Argument nicht ändern müssen, wählen Sie const . Dies beschränkt nicht die möglichen Verwendungen einer solchen Funktion, sondern erweitert sie, da sie jetzt für const Argumente und für const Objekte verwendet werden können.

In der Deklaration

%Vor%

jeder const bedeutet etwas anderes und ja, offensichtlich sollte verwendet werden, wenn es gebraucht wird .

Zusammenfassung

Die Verwendung von const erhöht die Typsicherheit Ihres Programms.

  

C ++ - FAQ :

     

[18.3] Sollte ich versuchen, const "früher" oder "später" zu korrigieren?

     

Sehr, ganz, ganz am Anfang.

    
4pie0 09.03.2014 18:09
quelle
3

Die Verwendung von const ist in der Regel eine gute Sache, aber es ist eine schlechte Formulierung. Sie sollten const verwenden, wo immer es möglich und sinnvoll ist .

Vor allem anderen (es kann, selten, öffnen Sie zusätzliche Optimierungsmöglichkeiten) ist es ein Mittel, um Ihre Absicht zu dokumentieren, nichts zu ändern.

Im konkreten Beispiel eines Mitglieds operator+ , das Sie angegeben haben, wäre die beste Lösung nicht alles const , sondern ein freistehendes operator+ , das auf dem Element operator+= basiert und ein Argument nach Wert nimmt so:

%Vor%

Diese Lösung funktioniert mit T , das auf beiden Seiten des Pluszeichens erscheint, ermöglicht die Verkettung, repliziert Code nicht und ermöglicht dem Compiler, das Maximum an Optimierungen durchzuführen.
Die Semantik von operator+ erfordert, dass eine Kopie erstellt wird, so dass der Compiler sie auch erstellen kann (der andere wird optimiert).

Es wäre möglich, one a const& zu erstellen, aber dann müssten Sie manuell eine Kopie erstellen, die wahrscheinlich suboptimal (und viel weniger intelligent) wäre.

    
Damon 09.03.2014 20:39
quelle
1

Wenn Sie const verwenden, sagen Sie dem Compiler etwas.

Es kann dann diese Informationen verwenden, um zu überprüfen, dass Sie etwas tun, was Sie nicht tun sollten, und es auch ermöglicht, den Code zu optimieren.

Wenn Sie also const verwenden, wird es intelligenter.

    
Ed Heal 09.03.2014 17:58
quelle
0

Ich denke, dass die Verwendung von const , wenn immer möglich, ein guter Weg ist. Es fügt Ihrem Code eine implizite Dokumentation hinzu und erhöht die Typsicherheit, wie in den anderen Antworten erwähnt.

Es ist schön zu wissen, dass Sie const -Funktionen aufrufen können, ohne sich Gedanken darüber machen zu müssen, ob sie den internen Status eines Objekts ändern und das Übergeben von const -Zeigern oder Verweisen auf ein anderes Objekt vor Kapselungsbruch schützt. Objekte, die const Referenzen besitzen, erhalten den größten Nutzen aus dem, worauf die Referenz verweist.

Auch das Anwenden von const von Anfang an ist eine gute Idee, da es später mühsam sein kann, etwas hinzuzufügen. Zum Beispiel, wenn Sie eine Klasse haben:

%Vor%

Und noch eins:

%Vor%

Und Sie wollen tun:

%Vor%

Dies ist ein vollkommen gültiger Anwendungsfall, aber Sie müssen dann const zu mehreren Orten hinzufügen, um es zu unterstützen ( B::getInternalCount() und A::getCount() ). Wenn Sie es von Anfang an tun, ist es tatsächlich ziemlich einfach, const zu verwenden und es macht das Design für andere Entwickler viel offensichtlicher. Wenn du alleine arbeitest, hilft es immer noch sehr, aber es ist nicht so wichtig. Bei der Arbeit in einem Team habe ich jedoch festgestellt, dass es sehr hilfreich war, wenn wir const durchgesetzt haben und einige unserer alten Codes nachgerüstet haben, um mehr zu erreichen.

Lange Rede, kurzer Sinn: Ich empfehle immer, es zu benutzen.

    
Chocobonstrife 09.03.2014 18:27
quelle