Maison >développement back-end >C++ >Pourquoi « std :: move » est-il appelé « std :: move » s'il ne déplace réellement rien ?

Pourquoi « std :: move » est-il appelé « std :: move » s'il ne déplace réellement rien ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-15 18:01:03636parcourir

Why is `std::move` Called `std::move` if it Doesn't Actually Move Anything?

Pourquoi std::move est-il nommé std::move ?

La fonction std::move, malgré son nom, ne le fait pas en fait, déplacer n'importe quoi. Il convertit simplement une lvalue (une expression faisant référence à un objet) en une rvalue (une expression représentant un objet temporaire). Cette conversion est effectuée via un cast vers la catégorie xvalue, qui est distincte des lvalues ​​et prvalues.

La raison de ce choix de dénomination remonte à l'histoire du concept. À l'origine, l'opération de déplacement a été introduite comme un moyen d'échanger efficacement des valeurs sans les copier. La première syntaxe pour cela impliquait la conversion de lvalues ​​en rvalues ​​à l'aide de static_cast. Pour améliorer la lisibilité et transmettre l'intention de ces conversions, le mot-clé move a été introduit comme sucre syntaxique pour static_cast.

Dans le contexte de l'époque, l'utilisation du terme « move » était censée indiquer le but de ces conversions. : pour activer la sémantique de déplacement. La conséquence est que le code ne transmet pas l'action technique précise (transformer en une rvalue), mais plutôt le résultat souhaité (déplacer l'objet).

Au fil des années, le concept de lvalues ​​et rvalues ​​a évolué vers le catégories de valeurs que nous avons aujourd'hui, avec des valeurs x représentant des objets qui ont été convertis en valeurs r. De ce fait, le mot-clé move pourrait être perçu comme trompeur, car il implique uniquement une action qui peut ou non se produire sous le capot.

Cependant, le choix d'utiliser le mot-clé move a été maintenu pour préserver la lisibilité. et évitez la confusion qui pourrait résulter d'une syntaxe inconnue comme cast_to_xvalue. La fonction std::move reste un utilitaire précieux qui permet aux programmeurs d'exprimer la sémantique des mouvements de manière concise, même si son nom ne reflète pas parfaitement les détails techniques de son fonctionnement.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn