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
-
http://www.c-plusplus.net/forum/viewtopic-var-t-is-238959.html
2. Post von Dravere
-
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
constsagt 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 intund initialisiert sie mit dem temporären Objekt 10. Du musst dir vorstellen, dass dasint-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. "