Referenz überprüfung



  • Hey Leute,

    Gerade eben lernte ich etwas über Referenzen. Nun habe ich aber nicht verstanden wann ich eine Referenz verwenden soll. Zurzeit übergebe ich alles über eine Referenz (Functions parameter) und frage mich warum ich eigentlich nicht auch ohne parameter meine inhalte übergeben kann

    Freue mich auf jede Rückmeldung

    MfG Sebi



  • Parameter != Referenz

    Wenn kopieren nicht zu teuer ist und du das Original nicht verändern willst, geht natürlich auch pass by value.



  • Danke Manni und wenn ich jetzt den Parameter jetzt als beispiel nur ausgebe und nicht verändere lohnt es sich es trotzdem als refernz zu übergeben?



  • manni66 schrieb:

    Wenn kopieren nicht zu teuer ist und du das Original nicht verändern willst, geht natürlich auch pass by value.



  • Sebi1997 schrieb:

    Danke Manni und wenn ich jetzt den Parameter jetzt als beispiel nur ausgebe und nicht verändere lohnt es sich es trotzdem als refernz zu übergeben?

    Naja, das wäre nach meiner Meinung ein richtiger Kandidat für eine const reference.

    Bei ints und bools macht das kaum Unterschied aber sobald du was schwereres hast als die Basic Datentypen würde ich immer genau überlegen ob eine reference es nicht auch tut.



  • Manni was meintest du mit "teuer"?



  • Sebi1997 schrieb:

    Manni was meintest du mit "teuer"?

    zeitaufwändig (große Daten)



  • Sebi1997 schrieb:

    Manni was meintest du mit "teuer"?

    Er meint mit "teuer" aufwendig zu kopieren.

    Stell Dir z.B. du hast einen String und in diesem sind k.a. 40 A4 Seiten oder ein ganzes Buch gespeichert und Du willst, dass jetzt in der Konsole ausgeben.

    Du hast also eine Funktion die den String annimmt.

    Bei Call By Value: Wüerde der ganze String kopiert werden und innerhalb des Scopes der Funktion würde der String jetzt im Speicher 2 mal existieren.

    E.g. der String ist 40mb groß wären dann temporär 80 mb im Speicher so lange bis der kopierte String wieder zerstört wird.

    Wenn du es allerdings als const reference übergibst, wird nichts an der Stelle kopiert.



  • Gut erklärt Ruvi danke doch warum ausgerechnet als const´?



  • Sebi1997 schrieb:

    Gut erklärt Ruvi danke doch warum ausgerechnet als const´?

    damit das Objekt nicht doch versehentlich geändert wird



  • Sebi1997 schrieb:

    Gut erklärt Ruvi danke doch warum ausgerechnet als const´?

    Wenn die Funktion das Objekt nicht ändert, wird so ermöglicht, auch konstante Objekte als Funktionsargument zu benutzen.


Log in to reply