Evitar la copia de objetos con la declaración de "retorno"
Tengo una pregunta muy básica en C ++. ¿Cómo evitar copiar al devolver un objeto?
Aquí hay un ejemplo :
<code>std::vector<unsigned int> test(const unsigned int n) { std::vector<unsigned int> x; for (unsigned int i = 0; i < n; ++i) { x.push_back(i); } return x; } </code>
Como entiendo cómo funciona C ++, esta función creará 2 vectores: el local (x) y la copia de x que se devolverá. ¿Hay alguna forma de evitar la copia? (y no quiero devolver un puntero a un objeto, sino al objeto en sí)
¿Cuál sería la sintaxis de esa función utilizando "mover semántica" (que se estableció en los comentarios)?