Nicht konstante Referenzen müssen mit l-Werten initialisiert werden. Wenn Sie sie mit Provisorien initialisieren könnten, was würde dann Folgendes tun?
int& foo = 5;
foo = 6; // ?!
const
Referenzen haben die besondere Eigenschaft, dass sie das Leben des Schiedsrichters verlängern, und da sie const
sind, gibt es keine Möglichkeit, dass Sie versuchen, etwas zu ändern, die nicht im Speicher nicht sitzen. Zum Beispiel:
const int& foo = 5;
foo = 6; // not allowed, because foo is const.
Denken Sie daran, dass Referenzen tatsächlich auf etwas verweisen müssen, nicht nur temporäre Variablen. Zum Beispiel ist das Folgende gültig:
int foo = 5;
int& bar = foo;
bar = 6;
assert(foo == 6);
Warte, also kann ich 'const classA & ref = ReturnsClassAByValue();'? Ich dachte, die Temperatur würde in der nächsten Zeile sterben. – Lucas
Ja, Sie könnten das verwenden. Die temporäre wird so lange dauern, wie die Referenzvariable: http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!378.entry –
Awesome, danke. Auf SO lernst du jeden Tag etwas Neues ... – Lucas