Domanda

Mi ci è voluto un bel po ' di tempo per capire la differenza tra un rvalue e un oggetto temporaneo.Ma ora l'ultima bozza del comitato indicato nella pagina 75:

Un rvalue [...] è un xvalue, un oggetto temporaneo o sotto-oggetto di esso, o un valore che non è associato con un oggetto.

Io non posso credere ai miei occhi.Questo deve essere un errore, giusto?


Per chiarire, qui è come ho capito i termini:

#include <string>

void foo(std::string&& str)
{
    std::cout << str << std::endl;
}

int main()
{
    foo(std::string("hello"));
}

In questo programma, ci sono due espressioni che indicano il medesimo oggetto temporaneo:il prvalue std::string("hello") e il lvalue str.Le espressioni non sono oggetti, ma la loro valutazione potrebbe cedere uno.In particolare, la valutazione di un prvalue produce un oggetto temporaneo, ma un prvalue NON È un oggetto temporaneo.Qualcuno d'accordo con me o sono io impazzito?:)

È stato utile?

Soluzione

Si, sono d'accordo con te. Questo dovrebbe essere fissato a mio parere, e diverse persone sono profondamente rispetto retribuzione di aver aumentato la stessa identica domanda su questo.

Altri suggerimenti

Questo non è così complicato come sembra.Mi riferisco alle finalizzato standard ISO/IEC 14882-2011.Pagina 78 dice:

Un xvalue (una “scadenza” valore), inoltre, si riferisce a un oggetto, di solito vicino alla fine del suo ciclo di vita (in modo che le sue risorse possono essere spostati, per esempio). Un xvalue è il risultato di alcuni tipi di espressioni che coinvolgono riferimenti rvalue (8.3.2).

Il grassetto è stato aggiunto da me.Lo standard dice:

Un rvalue (così chiamato, storicamente, perché rvalues possono apparire sul il lato destro di un'espressione di assegnazione) è un xvalue, un oggetto temporaneo (12.2) o secondario di esso, o un valore che non è associato ad un oggetto.

Così si ottiene solo un xvalue quando si sta giocando intorno con 'certi tipi di espressioni che coinvolgono rvalue riferimenti'.Altrimenti temporanea oggetti sono solo oggetti temporanei.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top