Referenz als Rückgabewert
-
Hallo,
habe eine grundlegende Frage zu Referenzen als Rückgabewert.
Folgender Code:
// eine tolle Funktion int& Function(int a) { return a; } int main() { int value, result; result = Function(value); return 0; }
Der Code diene nur der Anschauung, nichts Sinnvolles.
Meine Frage: Ist die zurückgegebene Referenz gültig? Nachdem int& Function(...) abgearbeitet ist, dürfte int a doch gar nicht mehr existieren. Warum sollte dann eine Referenz darauf existieren?Danke für euer Feedback,
Göbel
-
Hallo
soetwas ist auch nicht gültig. Bei meinem BCB kommt der Compiler-Fehler :
E2363 Versuch, eine Referenz an die lokale Variable 'a' zurückzugeben
bis bald
akari
-
Wenn dann solltest du sowas in der Art machen:
int& foo(const int l) { static int ref = l; return ref; }
So gehts, aber ob es sinnvoll ist, ist eine andere Frage
Caipi
-
Ist gefährlich und macht man nicht, auch wenn es erlaubt ist. Das führt nämlich du Speicherverwaltungsproblemen. Denn du gibst eine Reference auf ein temporäres Objekt zurück, welches auf dem Stack erzeugt wurde. Und bei verlassen der Funktion wird a vom Stack weg gelöscht bzw. es wird ungültig. Du bekommst also nur mit Glück einen Korrekten Wert zurück.
Also, lass es sein. Und by-Value zurück geben ist bei kleinen Objekten nicht schlimm von der Performance.
Wenn du unbedingt was anderes machen willst:
http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=auto_ptr#Answ