Maison > développement back-end > C++ > Pourquoi pouvez-vous utiliser `std::move` sur des objets constants en C ?

Pourquoi pouvez-vous utiliser `std::move` sur des objets constants en C ?

Linda Hamilton
Libérer: 2024-12-01 15:12:12
original
649 Les gens l'ont consulté

Why Can You Use `std::move` on Constant Objects in C  ?

Pourquoi std::Move peut être utilisé sur des objets constants

En général, invoquer std::move sur un objet constant semblerait illogique puisque on s'attend à déplacer ou à modifier l'objet. Cependant, en C 11, l'utilisation de std::move sur des objets constants est autorisée.

Pour élaborer, std::move(cat) n'implique pas que l'objet est réellement déplacé. Au lieu de cela, il demande au compilateur de tenter le déplacement. Dans les cas où la classe ne définit pas de constructeur qui accepte une référence const à une rvalue (par exemple, const Cat&&), le compilateur utilisera la référence const implicite à un constructeur de copie lvalue, effectuant ainsi une copie sécurisée à la place.

Considérons l'exemple suivant :

struct Cat
{
   Cat(){}
   Cat(const Cat&amp;) {std::cout << "COPY";}
   Cat(Cat&amp;&amp;) {std::cout << "MOVE";}
};

int main() {
    const Cat cat;
    Cat cat2 = std::move(cat);
}
Copier après la connexion

Même si std::move est utilisé, le message "COPY" sera affiché, indiquant que l'objet a été copié au lieu d'être déplacé.

Ce comportement sert de mécanisme de sécurité. Si le constructeur de copie est désactivé, le compilateur affichera un message d'erreur au développeur.

De plus, le bug mentionné dans le livre de Scott Meyers 'Effective Modern C' n'est pas un problème de stabilité mais un problème de performances. Cela se produit lorsqu'une copie implicite est effectuée alors qu'un déplacement est prévu, ce qui entraîne une exécution plus lente. De plus, de tels bogues peuvent survenir même avec des objets non const dépourvus de constructeurs de déplacement.

En fin de compte, permettre à std::move d'opérer sur des objets constants offre une flexibilité. Les développeurs conservent la possibilité de construire explicitement des objets à partir de références const rvalue si vous le souhaitez.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal