"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-16
Parcourir:628

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 des 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 valeur r), mais plutôt le résultat souhaité (déplacer l'objet).

Au fil des années, le concept de lvalues ​​et de rvalues ​​a évolué pour devenir 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. Par conséquent, le mot-clé move pourrait être considéré 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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3