2010-05-05 4 views
10

Wie unterscheidet man die beiden Versionen von operator ++?C++ Inkrementoperator

const T& operator ++(const T& rhs) 

welche?

i++; 
++i; 
+13

Was muss Ihr C++ Lehrbuch zu dem Thema sagen? –

Antwort

10

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.

+3

Sie können Nichtmitgliedsfunktionen sein. –

+0

@gf Wahr. Aber das wäre nicht meine erste Wahl für Inkrementoperatoren. (Meine erste Wahl wäre, die Operatoren sowieso nicht zu überlasten.) –

+2

@Daniel: Sie haben keine Wahl, wenn Sie einen C++ ish-Iterator oder Iterator-alike-Objekt schreiben wollen. –

3

für die postfix Operatoren ++ und - muss die Funktion eines Dummy int Argument. wenn es kein Argument hat, dann ist es der Präfixoperator

2

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.

11

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.

+0

@gf ein Beispiel hinzufügen und das wäre die beste Antwort –

+0

@Caspin: Guter Punkt, fertig. –