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,