In C ++, è ancora una ctriggers pratica restituire un vettore da una funzione?

Versione breve: è comune restituire oggetti di grandi dimensioni, come vettori / matrici, in molti linguaggi di programmazione. Questo stile è ora accettabile in C ++ 0x se la class ha un costruttore di movimento o i programmatori C ++ lo considerano strano / brutto / abominevole?

Versione lunga: in C ++ 0x questa è ancora considerata una ctriggers forma?

std::vector BuildLargeVector(); ... std::vector v = BuildLargeVector(); 

La versione tradizionale sarebbe simile a questa:

 void BuildLargeVector(std::vector& result); ... std::vector v; BuildLargeVector(v); 

Nella versione più recente, il valore restituito da BuildLargeVector è un valore rval, quindi v dovrebbe essere costruito utilizzando il costruttore di mosse di std::vector , assumendo che (N) RVO non abbia luogo.

Anche prima di C ++ 0x la prima forma sarebbe spesso “efficiente” a causa di (N) RVO. Tuttavia, (N) RVO è a discrezione del compilatore. Ora che abbiamo riferimenti di riferimento, è garantito che non verrà eseguita alcuna copia in profondità.

Modifica : la domanda non riguarda davvero l’ottimizzazione. Entrambe le forms mostrate hanno prestazioni quasi identiche nei programmi reali. Considerando che, in passato, la prima forma avrebbe potuto avere prestazioni peggiori in ordine di grandezza. Di conseguenza, la prima forma rappresentava un importante odore di codice nella programmazione C ++ per molto tempo. Non più, spero?