Avatar ·

Por que o return de uma função não aciona a move-semântica em C++11? Problema com rvalue-references

Olá! Comecei a estudar C++11 e move-semântica, e encontrei um problema. Escrevi uma função simples que cria um vetor e o retorna: ```cpp #include #include std::vector createVector() { std::vector v = {1, 2, 3, 4, 5}; return v; // Espero que haja move aqui } int main() { std::vector result = createVector(); std::cout << "Size: " << result.size() << std::endl; return 0; } ``` Eu esperava que no return o move-constructor fosse chamado para evitar cópia. Mas quando leio sobre rvalue-references e move-semântica, muitos dizem que o compilador decide o que fazer. Tentei usar explicitamente std::move: ```cpp return std::move(v); ``` Mas alguns dizem que isso pode até piorar a performance! Por quê? Qual é a diferença entre o return normal e o return com std::move? E como garantir que a move-semântica funcione ao retornar de uma função? Estou confuso com esses detalhes: rvalue, lvalue,