Originariamente inviato da serenasere24
Capisci qual'è il mio dubbio? Perché scrivere int& funzione() e non int funzione()? Cosa cambia se in entrambi i casi restituiamo return *pt1? Credevo che nel secondo caso (int&) si restituisse un riferimento a quell'area, e non una copia del valore contenuto in essa, invece sembra non essere così.

In altre parole (dimmi se ho capito bene) cambia quello che succede all'interno della funzione durante il return: nel primo caso viene creata una variabile int temporanea che contiene il valore di *pt1, mentre nel secondo caso viene restituito direttamente il valore contenuto da *pt1 senza eseguire una copia?

OK, FORSE HO CAPITO!

Nel primo caso il return crea una variabile temporanea di tipo int e ne restituisce il valore.
Nel secondo caso il return crea una variabile temporanea di tipo int e restituisce un riferimento a tale variabile.
No, vedila così. Un reference è come se fosse un puntatore, solo che "nascosto". Si può dirgli a che oggetto punta solo quando esso viene creato, e lo si manipola come se fosse un oggetto vero e proprio e non un puntatore, ma di fatto nascostamente resta un puntatore. Quando tu fai il return di qualcosa, se il tipo restituito è un tipo non-reference vai a restituire una *copia* (temporanea) di ciò che metti dopo return, mentre se il tipo restituito è un reference stai nascostamente restituendo un puntatore a ciò che metti dopo il return. Pertanto con i reference è bene avere buona parte delle cautele che si hanno con i puntatori (tra cui, ad esempio, non restituire mai reference ad oggetti locali).

Per dirla in un'altra maniera: un reference è un alias (un altro nome) per ciò con cui lo inizializzi; quando tu passi un parametro tramite reference, il nome del parametro diventa all'interno della funzione un altro nome con cui accedi a ciò che il chiamante le ha passato. Se tu restituisci un qualcosa via reference, il valore restituito dalla funzione è un altro "nome" per accedere alla variabile che tu stai restituendo.

Per ulteriori informazioni ti consiglio di leggere questo.
Quindi tornando al caso di operator=(Classe &) deve per forza restituire un Classe& altrimenti nel caso di assegnazione multipla mi da lo stesso errore del mio esempio.
Devi restituire un reference, altrimenti ciò che restituisce l'operatore = non sarebbe un alias per l'oggetto destinazione dell'assegnamento, e questo non consentirebbe di usare il valore restituito dall'assegnazione nella maniera che è "normale" in C++.