Es ist auch möglich, eine Referenz als Rückgabewert einer Funktion zu nutzen. Dies kann aber schnell zu Problemen führen, wie in folgendem Beispiel:
int &minimum(int a, int b) { if (a>b) return b; else return a; }
In diesem Beispiel wird eine Referenz auf das Minimum von a
und b
zurückgegeben. Das Problem ist nur, daß
beide Werte ja nur als lokale Variablen vorliegen, da sie per Wert
übergeben wurden. Daraus folgt wiederum, daß der von ihnen
belegte Speicherplatz beim Verlassen des Gültigkeitsbereiches
der Funktion wieder freigegeben wird, die Referenz würde somit
auf eine nicht mehr existierende Variable zeigen. Eine etwas bessere
Lösung wäre:
int &minimum(int &a, int &b) { if (a>b) return b; else return a; }
Hier würde eine der beiden Referenzen zurückgegeben, die dann auf eine der übergebenen Variablen zeigen würde. Doch müßte dann wirklich eine Variable übergeben werden, Konstanten wären nicht erlaubt. Dabei würde es nicht helfen, die Parameter als konstante Referenzen zu übergeben, da der Rückgabewert keine konstante Referenz sein kann - das Problem würde nur verschoben.
Ausführlich werden die Problme um Referenzrückgabe in
Meyers, Scott: Effektiv C++ programmieren besprochen.