c++ - revista - Devolución de objeto temporal y enlace a const referencia
revista ethos (1)
Esta es una característica de C ++. El código es válido y hace exactamente lo que parece hacer.
Normalmente, un objeto temporal solo dura hasta el final de la expresión completa en la que aparece. Sin embargo, C ++ especifica deliberadamente que vincular un objeto temporal a una referencia a const en la pila alarga la vida útil del temporal a la duración de la propia referencia, y evita así lo que de otro modo sería un error común de referencia colgante. En el ejemplo anterior, el temporal devuelto por foo()
vive hasta la llave de cierre.
PD: Esto solo se aplica a las referencias basadas en pila. No funciona para referencias que son miembros de objetos.
Texto completo: GotW # 88: Un candidato para la "const más importante" por Herb Sutter .
Posible duplicado:
¿Una referencia constante prolonga la vida de un temporal?
Mi compilador no se queja acerca de la asignación de referencias temporales a const:
string foo() {
return string("123");
};
int main() {
const string& val = foo();
printf("%s/n", val.c_str());
return 0;
}
¿Por qué? Pensé que la cadena devuelta por foo
es temporal y val puede señalar el objeto cuya vida ha terminado. ¿Lo permite el estándar C ++ y prolonga la vida útil del objeto devuelto?