Las referencias no const deben inicializarse con l-values. Si pudiera inicializarlos con provisionales, ¿qué haría lo siguiente?
int& foo = 5;
foo = 6; // ?!
const
referencias tienen la propiedad especial que se extienden la vida del árbitro, y puesto que son const
, no hay ninguna posibilidad de que se le intenta modificar algo que no se sienta en la memoria. Por ejemplo:
const int& foo = 5;
foo = 6; // not allowed, because foo is const.
Recuerde que las referencias en realidad tienen que referirse a algo, no solo a variables temporales. Por ejemplo, el siguiente es válido:
int foo = 5;
int& bar = foo;
bar = 6;
assert(foo == 6);
Espera, ¿eso significa que puedo usar 'const classA & ref = ReturnsClassAByValue();'? Pensé que la temperatura moriría en la siguiente línea. – Lucas
Sí, podría usar eso. El temporal durará tanto como lo haga la variable de referencia: http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!378.entry –
Impresionante, gracias. En SO, aprendes algo nuevo todos los días ... – Lucas