Ich habe eine Template-Klasse Array:
%Vor% Ich habe einige Fragen zum Operator []
overloading (Ich habe dieses Beispiel im Netz gefunden).
Ich verstehe, dass T& operator [](int idx)
den Verweis auf den Array-Wert mit dem Index idx
zurückgibt und dass T operator [](int idx) const
seinen Wert zurückgibt.
Ich bin mir jedoch nicht sicher, in welchem Fall Referenz oder Wert mit []
operator zurückgegeben wird.
Wenn ich auch T operator [](int idx) const
- & gt; T operator [](int idx)
, beschwert sich der Compiler. Warum das?
Ich kann verstehen, dass der Compiler sich beschwert, weil nur der Rückgabetyp anders ist, aber warum er sich nicht beschwert, wenn const
hinzugefügt wird? Das bedeutet nur, dass nicht die Klasseneinbauten modifiziert sind, oder?
Ich habe versucht, diese kleine Hauptimplementierung zu debuggen:
%Vor% Und jedes Mal, wenn T& operator [](int idx)
aufgerufen wird. Warum?
Vielen Dank im Voraus.
Die operator[]
Überladung wird basierend auf der const
-Qualität des Objekts, das Sie aufrufen, ausgewählt.
Wenn Sie const
aus T operator[]
entfernen, erhalten Sie einen Fehler, weil die Elementfunktionen nicht die gleiche const
-Qualität und -Parameter haben können, da es keine Möglichkeit gibt, zwischen ihnen auszuwählen.
Als erstes beachten Sie []
als syntaktischen Zucker für den Aufruf von this->operator[]
.
Die const
Version wird aufgerufen, wenn this
ein const
Zeiger ist, andernfalls wird die nicht const
Version aufgerufen.
Wenn Sie fortfahren, sollten Sie const T& operator [](int idx) const {
verwenden, d. h. die const
version gibt eine const
referenz zurück. Das wird den Overhead einer tiefen Kopie sparen.
Schließlich ist die const
-ness einer Funktion Teil ihrer Signatur. Dadurch können Sie basierend auf const
-ness überladen. Andernfalls könnten Sie nicht die beiden Versionen von operator[]
haben.
Tags und Links c++ operator-overloading overloading operator-keyword