Referenz als Argument bzw. return Typ
-
Mh ich hab mal nä blöde Frage. Ich bin heut igrnedwie nämlich n bissel verwirrt und weiß nimmer ob ich des so ganz blicke.
Hier mal ein Beispiel:
#include <iostream> using namespace std; int aendern1(const int &a); int aendern2(const int a); int main() { int temp=10; cout << aendern1(temp) << "\n"; cout << aendern2(temp); return 0; } int aendern1(const int &a) { return a+3; } int aendern2(const int a) { return a+3; }Bei diesem Beispiel ist es doch total egal ob a eine Referenz auf etwas ist oder nicht???
Das würde mir doch höchstens was bringen wenn das eine Methode in einer Klasse wäre? In Methoden soll man doch am besten immer Referenzen benutzen, weil dann kein Kopierkonstruktor aufgerufen wird, und das Programm somit schneller läuft?
Oder man nimmt Referenzen doch dazu, wenn man die Variable die man an eine Funktion übergibt innerhalb in der Funktion verändern möchte, also in dem Scope von der Funktion?
Weil irgendwie seh ich in meinem Buch in letzter Zeit immer Code's in denen so viele Referenzen verwendet werden, obwohl ich der Meinung wäre man bräuchte die gar nicht. Aber vll. gibts noch n paar andere Gründe um Referenzen zu verwenden?
Also ich verwende eine Referenz bei einer Funktion eigentlich nur wegen den gerade genannten Gründen.
So und dann noch n großes Problem, eine Referenz als return Typ bringt einem doch nur das man dann z.B. das hier schreiben kann "Funk(temp)=33"
bzw. in Methoden soll man doch als return Typ wieder Referenzen verwenden, sodass auch kein Kopierkonstruktor aufgerufen wird???
Um das Programm halt wieder schneller zu machen? Oder ist das mit der Schnelligkeit eigentlich nur minimal, oder merkt man da schon was?
So ich hoffe ihr wisst vll. noch n paar andere Gründe oder? Aber umso mehr ich über Referenzen nachdenken desto verwirrter werde ich im Kopf.
Ich will das einfach mal bissel auffrischen, weil irgendwie denk ich gar nicht mehr so richtig nach wenn ich eine Referenz verwende, ich mach das so bisschen automatisch manchmal, aber wenn ich jetzt so drübernachdenken dann....äh.... und bei manchen Beispielen in meinem C++.... da wundere ich mich au n bisschen, warum die zu jedem sch*** eine Referenz verwenden!
Ich hoffe ma das sich jemand den langen Text hier durchliest und mir alle meine Fragen beantwortet oder mich verbessert. Tipps, Anregungen, Erklärungen.... sine immer erwünscht!!Dankeschön schon mal im Voraus.
-
Hallo,
Falls ich das noch richtig in Erinnerung habe:
Eine Referenz ist ein alias Name auf eine Variable, daraus ergiebt sich: änderst du den Wert der ref. änderst du automatisch auch den Wert der Variablen.
D.h. wenn dufunc(int a)schreibst erstellst du eine Kopie der Variablen => schlechtes Laufzeitverhalten. [Edit] => bedenke: bei der Variable die du übergibst bleibt der Wert unverändert auch wenn du den Wert der Variablen änderst(in der Funktion natürlich)[/Edit]
Wenn du hingegenfunc(int &a)schreibst übergibst du die originale Variable(weil Referenz) => Besseres Laufzeitverhalten da keine Kopie erstellt werden muss, dass heißt aber automatisch auch dass du den Wert der Variablen veränderst(außerhalb der Funktion natürlich)
Hoffe das war das was du wolltest hab den Text nur überflogen

mfg Digger182
-
Stromberg schrieb:
Bei diesem Beispiel ist es doch total egal ob a eine Referenz auf etwas ist oder nicht???
Ja ist es. Da erstens a eh nicht geändert wird bzw geändert werden kann und zweitens das Performancemäßig kein Vorteil bei eingebauten Datentyp bringt.
Stromberg schrieb:
Das würde mir doch höchstens was bringen wenn das eine Methode in einer Klasse wäre? In Methoden soll man doch am besten immer Referenzen benutzen, weil dann kein Kopierkonstruktor aufgerufen wird, und das Programm somit schneller läuft?
Mit Methoden hat das rein gar nichts zu tun. Es geht generell um die Übergabe von Objekten. Bei "größeren" Klassen bringt das eine Menge, bei int,double.etc ist es schlicht überflüssig
Stromberg schrieb:
Oder man nimmt Referenzen doch dazu, wenn man die Variable die man an eine Funktion übergibt innerhalb in der Funktion verändern möchte, also in dem Scope von der Funktion?
Ja.
Stromberg schrieb:
So und dann noch n großes Problem, eine Referenz als return Typ bringt einem doch nur das man dann z.B. das hier schreiben kann "Funk(temp)=33"
Ja. Aber das sieht man selten. Referenzen werden eher von operatort - X Funktion zurückgeben. Bsp: op[] oder op<</>>
Bspweise um sowas zu ermöglichen:objekt[4] = ...; objekt << ... << ...;Stromberg schrieb:
in Methoden soll man doch als return Typ wieder Referenzen verwenden, sodass auch kein Kopierkonstruktor aufgerufen wird???
Wieder das Wort Methoden -> s.o. Das mit dem Copy-C'tor ist aber schon richtig

Stromberg schrieb:
Oder ist das mit der Schnelligkeit eigentlich nur minimal, oder merkt man da schon was?
Merken tut man schon viel.
