Maison > Article > développement back-end > Pourquoi `std::move` fonctionne-t-il sur les objets constants en C ?
C 11 a introduit la fonction std::move pour prendre en charge la sémantique de déplacement. Cela a soulevé une question : pourquoi std::move peut-il être utilisé sur des objets constants ?
Si nous essayons de déplacer un objet constant, il semble que nous essayions de le modifier, ce qui n'aurait aucun sens. Cependant, std::move ne déplace intelligemment rien. Au lieu de cela, il demande au compilateur de tenter de déplacer l'objet.
Si la classe de l'objet a un constructeur de déplacement, le déplacement se produira comme prévu. Mais si la classe ne le fait pas, le compilateur utilisera à la place le constructeur de copie, garantissant que l'objet constant est copié en toute sécurité.
Par exemple :
struct Cat { Cat() {} }; const Cat cat; Cat cat2 = std::move(cat);
Dans ce cas, le std ::move reviendra au constructeur de copie, imprimant "COPY" au lieu de "MOVE" si un std::cout est ajouté aux constructeurs.
le comportement de std::move sur les objets constants n'est pas un piège , mais une fonctionnalité. Il permet des tentatives de déplacement efficaces sans risquer la stabilité du programme. De plus, tout le code ne repose pas sur la sémantique de déplacement, donc permettre à std::move d'opérer sur des objets constants offre une flexibilité.
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!