Diciamo che ho una funzione:I valori di ritorno saranno passati dal riferimento di rvalue in C++ 0x?
typedef std::vector<int> VecType;
VecType randomVector();
int processing()
{
VecType v = randomVector();
return std::accumulate(v.begin(), v.end(), 0);
}
non C++ 0x specificamente dire la copia spuria sarà scongiurato dal valore di ritorno di randomVector? O un compilatore dovrebbe implementare il RVO? A me sembra che il valore randomVector()
debba essere trattato come un valore rvalore, e quindi il costruttore di v dovrebbe essere chiamato, ma non sono completamente sicuro che sia vero.
Non una buona domanda, IMHO. Lo standard non può indicare utilmente cosa può fare un'implementazione, solo ciò che DEVE fare. –
In realtà nell'esempio che avevi dato l'ottimizzazione del valore di ritorno viene eseguita dalla maggior parte dei compilatori ... Quindi è efficace senza valore. Anche il valore di rvalue è più importante per il passaggio degli argomenti alle funzioni. – Artyom
Il titolo della domanda è un po 'fuorviante. La tua funzione restituisce un valore e non un riferimento. Ma un riferimento di rvalue può legarsi ad esso che è ciò che accade nel caso in cui copy elision non può essere eseguita per qualche motivo e il tipo ha un move-constructor (Il parametro move-constructor è un riferimento di rvalore) – sellibitze