Maison >développement back-end >C++ >Pourquoi « std :: move » est-il appelé « std :: move » s'il ne bouge rien ?
Contrairement à son nom, std::move ne déplace physiquement rien ; au lieu de cela, il convertit l'objet en une référence rvalue ou, plus précisément, une xvalue. La décision de nommer la fonction move n'était pas pour tromper ou confondre mais pour rendre le code plus lisible.
Dans les premiers stades des références rvalue, la fonction std::swap devait être optimisée pour les performances. La méthode originale utilisait static_cast
En introduisant std::move, les conversions explicites ont été remplacées par du sucre syntaxique qui mettait l'accent sur l'intention du code : activer la sémantique de déplacement. Expliquer les détails techniques précis, tels que « cast to rvalue », aurait soulevé des questions supplémentaires, obscurcissant le point principal.
L'histoire de std:: move remonte à la proposition de références rvalue en 2002. La fonction move a été initialement introduite comme sucre de syntaxe pour static_cast
Au fur et à mesure de l'évolution du langage C, le concept de valeurs a été affiné pour devenir ce que nous appelons aujourd'hui les catégories de valeurs. Utiliser un nom différent, tel que cast_to_xvalue, pour décrire plus précisément l'opération aurait pu gêner la lisibilité.
À la base, std::move convertit simplement un objet à une valeur x. Cette conversion n'a aucun impact sur les objets trivialement mobiles, et pour les objets avec des opérateurs d'affectation de déplacement, elle garantit que l'opérateur d'affectation de déplacement est appelé à la place de l'opérateur d'affectation de copie.
En termes de code objet généré, std : move n'a aucun impact sur les objets trivialement mobiles. Pour les objets avec des opérateurs d'affectation de déplacement, cela peut modifier la résolution de surcharge. Cependant, au moment de l'exécution, std::move disparaît effectivement et son seul impact se situe au moment de la compilation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!