Quelles opérations sont autorisées sur les objets déplacés ?
La norme C définit le comportement des objets qui ont été déplacés. Cette connaissance est cruciale pour comprendre le fonctionnement de certaines fonctions, comme std::swap.
Définition standard
Selon la norme (section 17.6.5.15), les objets des types de bibliothèques standard C peuvent être déplacés et sont ensuite placés dans un "état valide mais non spécifié".
Implication pour les opérations
Lorsqu'un objet est dans un état non spécifié, vous pouvez effectuer n'importe quelle opération qui n'a pas de conditions préalables. Les opérations sans condition comprennent :
Cependant, les opérations avec des conditions préalables ne peut généralement pas être effectué sans vérification supplémentaire. Par exemple :
Exemple : std::swap
Le std : La fonction :swap, comme indiqué dans la question d'origine, nécessite une affectation aux objets déplacés. Ceci est possible car l'affectation est une opération sans condition préalable.
Remarque supplémentaire : T c = std::move(a) vs. T c(std::move(a))
Dans l'implémentation std::swap, une affectation de déplacement direct T c = std::move(a) est utilisée à la place d'un constructeur de copie T c(std::move(a)). Ceci est fait pour éviter une copie inutile de a, ce qui entraînerait une pénalité de performances.
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!