¿Por qué return de una función no invoca la semántica de move en C++11? Problema con las rvalue references
¡Hola! Empecé a entender C++11 y la semántica de move, y tengo un problema. Escribí una función simple que crea un vector y lo devuelve:
```cpp
#include
#include
std::vector createVector() {
std::vector v = {1, 2, 3, 4, 5};
return v; // Espero que haya move aquí
}
int main() {
std::vector result = createVector();
std::cout << "Size: " << result.size() << std::endl;
return 0;
}
```
Esperaba que al hacer return se llamara al move constructor para evitar la copia. Pero cuando leo sobre rvalue references y semántica de move, muchos dicen que el compilador decide qué hacer. Intenté usar std::move explícitamente:
```cpp
return std::move(v);
```
¡Pero algunos dicen que esto incluso puede empeorar el rendimiento! ¿Por qué? ¿Cuál es la diferencia entre un return normal y un return con std::move? ¿Y cómo garantizar que la semántica de move funcione al devolver desde una función? Me confundo con estos detalles: rvalue, lvalue, etc.