Ich fand diese interessante Zeile in: einem Buch Ссылка - Quellen - Kapitel 11 - Vec.h (Ich bin ein std :: Vektor-Remake)
Und ich verstehe nicht wirklich, wofür diese Version des Operators gut ist. Warum sollten zwei Versionen (const und nicht-const) dieses Operators definiert sein?
Ich habe es sogar ausprobiert und es scheint mir, dass die non-const-Version ständig aufgerufen wird ... Kannst du es bitte erklären?
%Vor%Danke!
Ganz sicher war das
%Vor%Const signalisiert dem Compiler, dass der Rückgabewert nicht durch den aufrufenden Code geändert werden darf.
Das hat zu tun mit:
Begründung : Wenn das deklarierende Objekt selbst
const
ist, gibt es keine Möglichkeit, dass die Methode einen Verweis auf ein (Teil von) einem Mitglied zurückgibtnon-const
; Const-ness cascades wenn Sie wollen: dies wird als const-correctness bezeichnet.
In der Praxis sieht man oft const / non-const Überladungen wie folgt:
%Vor%C ++ erlaubt das Überladen von Elementfunktionen, die sich nur in der Konsistenz unterscheiden. Die zwei Mitgliedsfunktionen in Ihrer Frage sind:
%Vor% Der erste Indizierungsoperator wird aufgerufen, wenn Sie ein nicht-konstantes Objekt vom Typ Vec
haben. Die zweite wird aufgerufen, wenn Sie ein const-Objekt vom Typ Vec
haben. Wenn Sie nicht über die zweite Elementfunktion verfügen, würde der Versuch, den Indexierungsoperator für eine Variable zu verwenden, die eine Konstante Vec
ist, zu einem Kompilierungsfehler führen.
In Ihrem Beispiel versuchen Sie Folgendes zu main
hinzuzufügen, nachdem Sie v
eingerichtet haben, um zu sehen, was passiert.
Tags und Links c++ operator-overloading