funktionsrückgabe
-
Hey,
bei folgendem Code bekomme ich eine Fehlermeldung das ich eine lokale Variable zurückgebe! Ich weiß das geht mit static weg, aber warum braucht man static hier? ich meine omg gibt den richtigen wert aus.
Außerdem wollte ich fragen ob es besser ist bei der Rückgabe
int& oder int zurückzugeben( also copie oder referenz). Was benutzt ihr standardmäßig?
Danke#include <iostream> using namespace std; int& ifunc( int &i ); int main() { int _20 = 20; int omg = ifunc( _20 ); cout << omg << endl; system("PAUSE"); return 0; } int& ifunc( int &i ) { int op1 = 20; int erg = op1 + i; return erg; }
-
#include <iostream> using namespace std; int& ifunc( int &i ); int main() { int _20 = 20; int& omg = ifunc( _20 ); // & ergänzt, sonst wäre es sinnlos ;) cout << omg << endl; // Zugriff auf ein zerstörtes Objekt! system("PAUSE"); return 0; } int& ifunc( int &i ) { int op1 = 20; int erg = op1 + i; return erg; } // erg wird hier zerstört!Bei static bleibt das Objekt bestehen über alle Funktionsaufrufe hinweg, daher kann man eine Referenz zurückgeben.
Ich verwende bei primitiven Typen kaum Referenzen. Der Grund ist eigentlich simpel, eine Referenz zu übergeben bei einem primitiven Typen ist genauso oder gar aufwendiger als eine Kopie. Ich verwende Referenzen bei primitiven Typen wirklich nur dann, wenn man sie irgendwie verändern will und dann eigentlich nur als Funktionsparameter.
Grüssli
-
ok danke
Das heißt in der Praxis bei der Funktionsübergabe & verwenden weil das schneller ist als Kopieren aber bei rückgabe kann man unbesorgt kopieren?