Wie unterscheidet man die beiden Versionen von operator ++?C++ Inkrementoperator
const T& operator ++(const T& rhs)
welche?
i++;
++i;
Wie unterscheidet man die beiden Versionen von operator ++?C++ Inkrementoperator
const T& operator ++(const T& rhs)
welche?
i++;
++i;
Diese Operatoren sind unär, d. h. sie nehmen keinen rechten Seitenparameter.
Für Ihre Frage, wenn Sie diese Operatoren wirklich überladen müssen, verwenden Sie für die Vorinkremente die Signatur const T& operator ++()
und für die Postinkremente const T& operator(int)
. Der int-Parameter ist ein Dummy.
Sie können Nichtmitgliedsfunktionen sein. –
@gf Wahr. Aber das wäre nicht meine erste Wahl für Inkrementoperatoren. (Meine erste Wahl wäre, die Operatoren sowieso nicht zu überlasten.) –
@Daniel: Sie haben keine Wahl, wenn Sie einen C++ ish-Iterator oder Iterator-alike-Objekt schreiben wollen. –
für die postfix Operatoren ++ und - muss die Funktion eines Dummy int
Argument. wenn es kein Argument hat, dann ist es der Präfixoperator
Denken von Postfix Inkrement i++
einen zweiten (fehlt) Parameter (d.h. i++x
). Daher hat die Postfix-Inkrementierungssignatur einen rechten Parameter, während das Präfixinkrement keinen rechten Parameter aufweist.
Für die Dritt Versionen, eine Funktion mit einem Parameter ist Präfix während eine Funktion mit zwei Parametern und der zweite ist int
Postfix ist:
struct X {};
X& operator++(X&); // prefix
X operator++(X&, int); // postfix
für die Mitglieds-Versionen, die Null-Parameterversion Präfix und die ein-Parameter-Version ist int
Einnahme ist postfix:
struct X {
X& operator++(); // prefix
X operator++(int); // postfix
};
der int
Parameter auf Rufe der postfix-Operatoren werden Nullwert haben.
@gf ein Beispiel hinzufügen und das wäre die beste Antwort –
@Caspin: Guter Punkt, fertig. –
Was muss Ihr C++ Lehrbuch zu dem Thema sagen? –