È valido memorizzare il valore restituito di un oggetto in un riferimento?Memorizza valore di ritorno della funzione in riferimento C++
class A { ... };
A myFunction()
{
A myObject;
return myObject;
} //myObject goes out of scope here
void mySecondFunction()
{
A& mySecondObject = myFunction();
}
E 'possibile fare questo al fine di evitare di copiare myObject a mySecondObject? myObject non è più necessario e dovrebbe essere esattamente lo stesso di mySecondObject, quindi in teoria sarebbe più veloce solo per passare la proprietà dell'oggetto da un oggetto a un altro. (Questo è possibile anche utilizzando il puntatore condiviso di boost ma che ha il sovraccarico del puntatore condiviso.)
Grazie in anticipo.
Ti capita di sapere perché questo non è permesso? – Mehrdad
Non sono sicuro, ma suppongo che il motivo sia che consentire un riferimento non const significherebbe che al compilatore sarebbe richiesto di determinare quando il riferimento viene nuovamente assegnato. Ritengo che questo sia normalmente considerato parte dell'analisi dell'ambito dinamico e non utilizzato nello standard C++. Nel caso const, invece, è necessario determinare solo la durata statica del riferimento. Questa analisi è probabilmente già richiesta in altri casi ed è stata quindi ritenuta accettabile. –
Si può anche notare che questa è una caratteristica di tracciamento puntatore piuttosto semplicistica, e che si potrebbe immaginare un sistema più avanzato. Ma in generale credo che il C++ voglia evitare questo problema e delegarlo invece al programmatore. Ecco a cosa servono gli indicatori intelligenti. –