Compréhension étendue de la conversion de std::move en Rvalues
En C, std::move() joue un rôle crucial dans la conversion des expressions aux rvalues (références de bonne valeur). Cependant, sa mise en œuvre peut être déroutante à comprendre. Cet article vise à fournir une compréhension claire de la fonction move et de son comportement avec les valeurs lvalues et rvalues.
Implémentation de std::move()
Le std La fonction ::move(), telle qu'implémentée dans la bibliothèque standard MSVC, prend un argument de référence rvalue (&&) et renvoie une référence rvalue. Cela permet à std::move() de gérer efficacement à la fois les lvalues (références de valeur de gauche) et les rvalues.
Rvalue Binding
Lorsque std::move() est appelé avec une rvalue, telle qu'un objet temporaire, le paramètre de référence _Arg se lie directement à la rvalue. C'est simple puisqu'une référence rvalue peut se lier à une rvalue.
Lvalue Binding
Lorsque std::move() est appelé avec une lvalue, le paramètre de référence _Arg se lie à une référence lvalue (Object&). Cela soulève la question de savoir comment une référence rvalue peut se lier à une lvalue.
Réduction des références
Pour comprendre ce comportement, nous devons considérer les règles de C 11 pour la réduction des références. . Ces règles stipulent que :
Object & & = Object & Object & && = Object & Object && & = Object & Object && && = Object &&
Selon ces règles, Object& && est équivalent à Object&, qui est une référence lvalue simple qui peut se lier à des lvalues.
Effet de remove_reference
std::move() utilise std::remove_reference pour supprimer toutes les références existantes du type de l'argument, ce qui donne un nom de type tr1::_Remove_reference
Avantages de l'implémentation
L'implémentation de std :: move() offre plusieurs avantages :
Conclusion
std::move() est minutieusement conçue pour convertir efficacement les expressions en rvalues, en gérant à la fois les lvalues et les rvalues avec la réduction des références et en garantissant un type de retour de référence rvalue cohérent. Ce mécanisme joue un rôle essentiel dans l'utilisation de la sémantique de déplacement en C .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!