Cercando di imparare lvalues
, rvalues
e allocazione di memoria per loro. Quindi con un sacco di materiale didattico c'è un po 'di caos.Come rvalore in C++ memorizzato in memoria?
Un rvalue
è un valore che deve esistere solo nei limiti di un'espressione in cui è stato creato (fino almeno a C++ 11). Quindi ha un indirizzo e un blocco di memoria che occupa. Ma per definizione non possiamo ottenere un indirizzo di rvalue
, perché si tratta di un oggetto temporaneo in contrasto con uno lvalue
. Ma anche prima del C++ 11 siamo riusciti a ottenere un indirizzo di rvalue
restituendolo da una funzione e salvandolo in un tipo di riferimento const (uh, suppongo non un indirizzo ma un valore).
Quindi, più precisamente, come funziona l'allocazione rvalue
? Per quanto tempo il programma o il sistema operativo ricordano realmente quel luogo di memoria in cui lo rvalue
è stato creato e contrassegnato come assegnato e un altro oggetto non può sostituirlo?
Come vedo, ora rvalues
vengono memorizzati come ma abbiamo semplicemente altri diritti per accedervi. E hanno altri tipi di deallocation - per lvalues
che escono dall'ambito, per rvalues
può essere ottimizzato da un'esistenza in limiti di espressione o finché non ci sono più collegamenti ad esso.
lvalue e rvalue sono categorie di espressioni. Non usano alcuna memoria. Quello che usa lo spazio di archiviazione è * oggetti *. (e talvolta, riferimenti). Sembra che tu stia scrivendo "rvalue" quando in realtà intendi "oggetto temporaneo". –
Non penso che i rvalue debbano avere un indirizzo. Possono essere semplicemente valutati in registri. –
@ M.M, hai ragione. –