Oje, Referenzen als Rückgabetyp.
-
Hi!
string buff("Hello, I am your string buffer!"); string& get_buffer_as_reference() { return buff; } string get_buffer_as_string() { return buff; }Bringt mir das irgendwas, in irgendeinem Fall, eine Referenz zurückzugeben? Kann mir jemand ein Beispiel nennen?
Ich habe mal das hier probiert:
void show_buffer() { cout << buff << endl; } int main() { string rs = get_buffer_as_reference(); show_buffer(); string s = get_buffer_as_string(); show_buffer(); rs = "a"; show_buffer(); // keine Änderung! return 0; }Obwohl ich eine Referenz zurückgegeben habe, hat die Zeile
rs = "a";das Objekt nicht geändert.

-
string& rs = get_buffer_as_reference(); ^ | |
-
string &rs = get_buffer_as_reference();Das Zurückgeben als Referenz spart in bestimmten Fällen auf jeden Fall den Kopierkonstruktor.
-
weil dein rs nicht den Typ string& sondern string hat. Das beduetet, dass der Inhalt der Referenz in ein neues Objekt kopiert wird. string rs stellt ein eigenständiges Objekt dar.
Würest du es so machen:
string& s = get_string_ref(); s = "xyz";wäre dein string geändert.
Hat verschiedene Anwendungsfälle:- man möchte, dass das Objekt verändert werden kann und die Änderungen sollen permanent übernommen werden (wie in deinem Beispiel)
- man möchte sich das kopieren des Rückgabewertes ersparen. Möchte man dann verhindern, dass das Objekt verändert wird, kann auch const string& zurückgegebn werden.
-
So toll ist das aber alles nicht.
Globale Variablen sind schon mal blöd.Dann musst du bei sowas immer aufpassen, das das referenzierte Objekt auch länger lebt, als die zurückgebende Funktion etc.
-
string **&**rs;
Danke, genau das habe ich gesucht!