Evitar cópia de objetos com a instrução "return"

Eu tenho uma pergunta muito básica em C ++. Como evitar a cópia ao retornar um objeto?

Aqui está um exemplo :

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

Pelo que entendi como o C ++ funciona, esta função irá criar 2 vetores: o local (x), e a cópia de x que será retornada. Existe uma maneira de evitar a cópia? (e eu não quero retornar um ponteiro para um objeto, mas o próprio objeto)

Qual seria a sintaxe dessa função usando "mover semântica" (que foi declarada nos comentários)?

questionAnswers(7)

yourAnswerToTheQuestion