Call by Value, Call by Reference, und dann... ?



  • Arcoth schrieb:

    anyType &myType = myVector[i];
     
    .... // any thing that "could" change the vector
     
    myType.member = 1;
    

    ➡

    Arcoth schrieb:

    Allgemeinere Variante des oberen Stickpunkts: Das Objekt auf das eine Referenz verweist wird zerstört. [...] Sie sollten auch nicht mit etwas initialisiert werden was zerstört wird bevor die Referenz out-of-scope geht.

    Aber das sieht man wie in meinem Beispiel nicht immer. Aber Du hast recht, ist im Grunde genommen in Deinem Punkt enthalten.

    Arcoth schrieb:

    Ja, wünschenswert ist das sicherlich. Aber leider nicht immer ohne Klimmzüge realisierbar.

    Kompensieren die Vorteile nicht die Klimmzüge?

    Nicht immer. Gerade wenn auch die Performanz ein Problem ist.

    mfg Martin


  • Mod

    Gerade wenn auch die Performanz ein Problem ist.

    Man kann das Inlinen von Funktionen forcieren (bspw. durch das Attribut always_inline beim GCC).



  • [quote="Arcoth"]

    Shor-ty schrieb:

    Also so wie ich das sehe handelt es sich nicht um call-by-value weil du ja nicht den Wert (value) sondern die Adresse übergibst.

    Eine Adresse ist auch ein Wert. Ein Zeiger hat einen Wert, nämlich eine Adresse.

    Ja gut okay, wo du recht hast hast du recht. Ich dachte - durch meine »noch« sehr große Unwissenheit - das mit VALUE nur der WERT der Variablen gemeint ist und nicht die Adresse. Aber sicherlich hast du recht zu sagen das eine Adresse auch ein Wert ist. Danke für eure ausführlichen Antworten.

    Viele Grüße
    Tobi



  • mgaeckler schrieb:

    Aus diesem Grund verwende ich bei Funktionsdefinitionen, wenn ich call by reference brauche eher selten Referenzen sondern lieber Zeiger. In diesem Fall sieht man nämlich die Aufrufart auch beim Aufrufer. Wenn ich aber call bei referece nur aus Performanzgründen nutze und ich den Wert eh nicht verändern will, dann nehme ich auch schon mal 'ne const reference:

    Geht mir auch so. Ich meine, daß ich dadurch viel mehr Zeit beim Code-Lesen spare, als ein paar Nullzugriffe kosten könnten. Nullzugriffe findet man dochj sofort. Aus Versehen eine schreibende Funktion aufgerufen fällt einem bei der Referenzvariante gar nicht auf.


Anmelden zum Antworten