konstante Referenz



  • hiho

    wo liegt eigentlich der Unteschied zwischen

    const int i = 10;
    

    und

    const int& r = 10;
    

    In beiden Fällen wird Speicher allokiert und ein symbolischer Name eingeführt...

    MFG Dweb





  • Dweb schrieb:

    konstante Referenz

    Alle Referenzen sind konstant (können während ihrer Lebensdauer nur auf ein Objekt verweisen und müssen mit diesem initialisiert werden). Das const sagt nur etwas über das referenzierte Objekt aus - also ob dieses über die Referenz verändert werden darf.

    Dweb schrieb:

    In beiden Fällen wird Speicher allokiert und ein symbolischer Name eingeführt...

    Das ist ein bisschen komplizierter, da Const-Referenzen gegenüber "normalen" Referenzen speziell behandelt werden.

    const int i = 10;
    

    deklariert und definiert eine int -Variable und initialisiert diese mit dem Wert 10.

    const int& i = 10;
    

    deklariert eine Referenz auf const int und initialisiert sie mit dem temporären Objekt 10. Du musst dir vorstellen, dass das int -Literal 10 hier nur temporär (also während des Ausdrucks) existiert. Danach würde es normalerweise zerstört werden (okay, es ist hier ein skalarer Datentyp, aber bei Klassentypen wäre es so). Du erzeugst also ein Objekt und lässt deine Referenz darauf verweisen. Die Const-Referenz sorgt nun dafür, dass die Lebensdauer des temporären Objekts verlängert wird; dieses existiert nun über die Zeit des Ausdrucks hinweg.

    Ich weiss, ist etwas umständlich formuliert, ich hoffe, du hast trotzdem etwas verstanden. 😉



  • Nexus schrieb:

    Ich weiss, ist etwas umständlich formuliert, ich hoffe, du hast trotzdem etwas verstanden. 😉

    joa thx, nun kam etwas Licht in die Sache 🙂

    Habe gerade auch noch das dazu gefunden, das deine Aussage wiedergibt:

    " C++ does allow initialising a const reference with a literal value (or other rvalue).
    What actually happens is that the compiler creates a temporary,
    initialised with the RHS,
    and initialises the reference to refer to that temporary.
    The compiler ensures that the temporary stays alive until scope exit. "


Anmelden zum Antworten