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)?

Respuestas a la pregunta(7)

Su respuesta a la pregunta