Pourquoi le retour d'une fonction n'appelle-t-il pas la sémantique de move en C++11 ? Problème avec les références rvalue
Bonjour ! J'ai commencé à étudier le C++11 et la sémantique de move, et j'ai rencontré un problème. J'ai écrit une fonction simple qui crée un vecteur et le retourne :
```cpp
#include
#include
std::vector createVector() {
std::vector v = {1, 2, 3, 4, 5};
return v; // J'espère un move ici
}
int main() {
std::vector result = createVector();
std::cout << "Size: " << result.size() << std::endl;
return 0;
}
```
Je m'attendais à ce que le constructeur de move soit appelé lors du return pour éviter la copie. Mais quand je lis sur les références rvalue et la sémantique de move, beaucoup disent que le compilateur décide lui-même quoi faire. J'ai essayé d'utiliser explicitement std::move :
```cpp
return std::move(v);
```
Mais certains disent que cela peut même dégrader les performances ! Pourquoi ? Quelle est la différence entre un return normal et un return avec std::move ? Et comment garantir que la sémantique de move fonctionnera lors du retour d'une fonction ? Je me perds dans ces subtilités : rvalue, lvalue,