Prima di C++ 11, se avessi una funzione che operava su oggetti di grandi dimensioni, il mio istinto sarebbe quello di scrivere funzioni con questo tipo di prototipo.In C++ 11, c'è ancora la necessità di passare un riferimento a un oggetto che accetterà l'output di una funzione?
void f(A &return_value, A const ¶meter_value);
(Qui, return_value è solo un oggetto vuoto che riceverà l'output della funzione. A è solo una classe che è grande e costoso da copiare.)
In C++ 11, tenendo vantaggio della semantica mossa, la raccomandazione di default (se ho capito bene) è il più semplice:
A f(A const ¶meter_value);
c'è sempre ancora la necessità di farlo alla vecchia maniera, passando in un oggetto per contenere il valore di ritorno?
Ho pensato che la raccomandazione predefinita è sempre stata "fai ciò che è conveniente e togliti di mezzo se lo trovi necessario" ... – Mehrdad
Non c'è mai stata una tale necessità, controlla http://cpp-next.com/ archivio/2009/08/want-speed-pass-by-value/ –
@ K-ballo: Potrebbe esserci stato un bisogno pre-standard (anche se le persone tendono a non riconoscerlo, il C++ esisteva quasi 20 anni prima che fosse standardizzato) . Anche se forse no, stavo solo iniziando ad imparare C++ sul tempo della standardizzazione (e non sapevo nemmeno che stesse succedendo in quel momento), c'era una cosa come elision di copia prima dello standard? È stato utilizzato dai compilatori popolari? –