Avatar ·

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