2015-01-08 3 views
8

Sto imparando recentemente nuove funzionalità di C++ 11. Tuttavia, non capisco perfettamente una cosa sui rvalues.Dove vengono archiviati i valori in C++?

Considerate seguente codice:

string getText() 
{ 
    return "Fabricati diem"; 
} 

string newText = getText(); 

Chiama per getText() crea un valore di R che viene copiato newText variabile. Ma dove è memorizzato esattamente questo valore? E cosa succede dopo la copia?

+1

In realtà non viene copiato a causa di [ritorno ottimizzazione del valore] (http://en.wikipedia.org/wiki/Return_value_optimization) – CoryKramer

+7

@Cyber ​​Non può essere spostato * e * RVO'd. È l'uno o l'altro, molto probabilmente il secondo. – juanchopanza

+0

Buona presa, hai ragione. Ho modificato il mio commento. – CoryKramer

risposta

8

Chiama a getText() crea un valore r che viene copiato nella variabile newText.

Potrebbe creare un temporaneo; ma questa è una situazione in cui è consentito copy elision, quindi è più probabile che newText venga inizializzato direttamente dalla funzione return, senza temporaneo.

Ma dove è memorizzato esattamente questo valore?

Spetta al compilatore dove memorizzare un temporaneo; lo standard specifica solo la sua durata. Tipicamente, verrà trattato come una variabile automatica, memorizzata in registri o nel frame dello stack della funzione.

E cosa succede dopo la copia?

La durata di un temporaneo estende fino alla fine del full-espressione che lo ha generato (meno che non sia utilizzato per inizializzare un referenece, nel qual caso dura finché tale riferimento). Quindi qui, viene distrutto immediatamente dopo averlo utilizzato per inizializzare newText.