¿Es válido almacenar el valor de retorno de un objeto en una referencia?Almacenar el valor de retorno de la función en la referencia C++
class A { ... };
A myFunction()
{
A myObject;
return myObject;
} //myObject goes out of scope here
void mySecondFunction()
{
A& mySecondObject = myFunction();
}
¿Es posible hacer esto con el fin de evitar copiar myObject a mySecondObject? myObject ya no es necesario y debería ser exactamente igual que mySecondObject, por lo que en teoría sería más rápido simplemente para pasar la propiedad del objeto de un objeto a otro. (Esto también es posible mediante el impulso del puntero compartido, pero eso tiene la sobrecarga del puntero compartido.)
Gracias de antemano.
¿Por casualidad sabe por qué esto no está permitido? – Mehrdad
No estoy seguro, pero supongo que la razón es que permitir una referencia no const significaría que el compilador debería determinar cuándo se reasignará la referencia. Considero que esto normalmente se considera parte del análisis de alcance dinámico y no se usa en el estándar de C++. En el caso de const, por otro lado, solo la vida estática de la referencia necesita ser determinada. Este análisis probablemente ya sea necesario en otros casos y, por lo tanto, se consideró aceptable. –
También se puede observar que esta es una función de seguimiento de puntero bastante simple, y que uno podría imaginar un sistema más avanzado. Pero, en general, creo que C++ quiere evitar ese problema y delegarlo al programador. Para eso están los indicadores inteligentes. –