Es gibt viele Codes für Erklärungen im Internet (auch speziell hier auf Stackoverflow), die *this
zurückgeben.Warum geben einige Klassenmethoden "* this" zurück (Objektreferenz von self)?
Zum Beispiel von Post Copy constructor and = operator overload in C++: is a common function possible?:
MyClass& MyClass::operator=(const MyClass& other)
{
MyClass tmp(other);
swap(tmp);
return *this;
}
Wenn ich schreibe Swap als:
void MyClass::swap(MyClass &tmp)
{
// some code modifying *this i.e. copying some array of tmp into array of *this
}
Ist das nicht genug Einstellung Rückgabewert von operator =
-void
und vermeiden *this
Rückkehr?
Wie denkst du, dass Verkettungsaufgaben wie 'a = b = c' funktionieren? –
Das "normale" Verhalten von 'operator =' ist, dass der Verweis auf das Ergebnis der Operation zurückgegeben wird. Sie können es als void definieren, aber es verhält sich anders als alle Benutzererwartungen. Sie können einfach nicht etwas wie '(x = y) ++' oder irgendeine andere Auswertung schreiben, die den Ergebniswert verwendet. Es ist wichtig, dass Sie den Verweis auf das Objekt und nicht nur den Wert zurückgeben. Wenn Sie nur den Wert zurückgeben, wird der obige Begriff kompiliert, aber das Ergebnis ist falsch! – Klaus
Dies wird [Method Chaining] (https://en.wikipedia.org/wiki/Method_chaining#C.2B.2B) genannt. Related: [Was bedeutet "return * this" in C++?] (Http://stackoverflow.com/q/18162522/514235). – iammilind