Lokale Objekte existieren nicht mehr nach Rückkehr aus der Funktion.
Abhilfe durch dynamische allokierte Objekte birgt die Gefahr des Speicher-Lecks:
complex& operator +(const complex& c1, const complex& c2) { complex* res = new complex (c1.r + c2.r, c1.i + c2.i); return *res; }
Wer ruft das dazugehörige delete auf?.
complex& four = two + two; ... delete &four;
Entweder der Programmierer vergißt es, oder er hat gar keine Chance:
complex eight = two + two + two + two;
Also: Wertrückgabe.