Ci sono un sacco di codici per la spiegazione su internet (anche specificamente qui, su StackOverflow) che restituiscono *this
.Perché alcuni metodi di classe restituiscono "* this" (riferimento all'oggetto di self)?
Per esempio dal 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;
}
Quando scrivo di swap come:
void MyClass::swap(MyClass &tmp)
{
// some code modifying *this i.e. copying some array of tmp into array of *this
}
non è sufficiente valore di ritorno di impostazione di operator =
-void
ed evitare il ritorno *this
?
Come pensi che i compiti concatenati come 'a = b = c' funzionino? –
il comportamento "normale" di 'operator =' è quello di restituire il riferimento al risultato dell'operazione. Puoi definirlo come vuoto ma si comporta in modo diverso da tutte le aspettative degli utenti. Semplicemente non è possibile scrivere qualcosa come '(x = y) ++' o qualsiasi altra valutazione che utilizza il valore del risultato. È importante che tu restituisca il riferimento all'oggetto non solo il valore. Se restituisci solo il valore, il termine sopra verrà compilato ma il risultato è sbagliato! – Klaus
Questo è chiamato [Metodo di concatenazione] (https://en.wikipedia.org/wiki/Method_chaining#C.2B.2B). Corretto: [Cosa significa "restituisce * questo" in C++?] (Http://stackoverflow.com/q/18162522/514235). – iammilind