2015-05-20 11 views
11

Let foo mit einem Kopie Zuweisungsoperator eine Struktur oder Klasse sein:Gibt es jemals einen stichhaltigen Grund, * das vom Kopierzuweisungsoperator nicht zurückzugeben?

struct foo { 
    foo &operator=(const foo &); // or with some other return type? 
}; 

Gibt es jemals einen vernünftigen Grund, etwas anderes als *this vom operator=() zurückzukehren? Es für etwas zu verwenden, das nichts mit der Aufgabe zu tun hat, gilt nicht als sinnvoll.

+1

Wenn Sie 'this *' zurückgeben, können Sie den Zuweisungsoperator wie 'i = j = k = ...' verketten. Sie können andere Dinge zurückgeben, aber wie nützlich das ist, hängt von Ihren Definitionen ab und davon, wie Ihre Klassen verwendet werden sollen. – Alex

+4

Ausdruckvorlagen. –

+5

@AlanStokes Es wäre schön, wenn Sie das weiter ausführen würden, wissen Sie. –

Antwort

9

Das Beispiel aus dem Standard ist std::atomic. Es gibt den zugewiesenen Wert zurück. Wenn die Referenz zurückgegeben wird, kann das Durchlesen zu einem anderen Ergebnis führen.

+0

Kennen Sie andere Beispiele? – Wolf

+2

@Wolf: Boost :: Phoenix ist eine Bibliothek, um faule Ausdrücke zu erstellen. Also würde 'operator =()' dort ein Objekt zurückgeben, das man 'operator()()' on nennen könnte, um die Zuweisung tatsächlich durchzuführen. –

+0

@BillLynch das scheint zu sein, was Alan Stokes erwähnt? – Wolf

0

Wenn Sie Zuordnung Verkettung verhindern wollen.

Manchmal ist es schön zu verhindern Ausdrücke wie folgt aus:

x = y = z = a = b = c = d = foo{15}; 

So stellen Sie den Zuweisungsoperator Rückkehr nichtig.

struct foo { 
    void operator=(const foo &); 
}; 

Für einige Typen macht eine Verkettung keinen Sinn. Aber Sie müssen sich das einmal anschauen.