2010-10-15 9 views
8

Ich aktualisiere gerade meine C++ Fähigkeiten und frage mich, ob es möglich ist, etwas zu *this zuzuordnen. Ich weiß das Zuweisen zu this ist verboten, kann aber nicht die gleichen Informationen für meinen Fall finden.Ist es erlaubt, dies einer dereferenzierten (* dies) zuzuordnen?

Ein Beispiel:

class Foo { 
    int x; 
public: 
    Foo(int x) : x(x) {} 
    Foo incr() { return Foo(x+1); } 
    void incr_() { (*this) = incr(); } 
}; 

Edit: korrigiert incr() ‚s Rückgabetyp von void zu Foo.

Antwort

2

void incr() { return Foo(x+1); }

Dies ist ungültig. Sie können ein Foo-Objekt nicht von einer Funktion mit dem Rückgabetyp void zurückgeben.

void incr_() { 

    (*this) = incr(); // This invokes Foo& operator = (const Foo&) (compiler synthesized) 
} 

Das ist in Ordnung.

+3

Dies wäre besser als Kommentar als als Antwort, IMO. –

+1

@Etienne: Lass meine Antwort zuerst vervollständigen. ':)' –

+1

Sie haben völlig Recht, aber ich habe einfach einen Fehler gemacht. Ich meinte, die Funktion sei 'Foo incr()'. – Kolja

4

Ja, es ist erlaubt, und es ruft tatsächlich den Zuweisungsoperator Ihrer Klasse auf.

0

Ja, Sie können, wenn der Rückgabewert *this einem Datentyp entspricht, für den ein Zuweisungsoperator definiert wurde.

1

Ja, es funktioniert. Und *this = x ist nur syntaktischer Zucker für operator=(x).