Referenzen als Rückgabewert

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.