Maison > développement back-end > C++ > Que pouvez-vous faire avec un objet déplacé depuis en C ?

Que pouvez-vous faire avec un objet déplacé depuis en C ?

Susan Sarandon
Libérer: 2024-12-25 12:03:09
original
566 Les gens l'ont consulté

What Can You Do with a Moved-From Object in C  ?

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 :

  • Destruction
  • Affectation
  • Observateurs constants (par exemple, obtenir, vider, taille)

Cependant, les opérations avec des conditions préalables ne peut généralement pas être effectué sans vérification supplémentaire. Par exemple :

  • Déréférence
  • pop_back

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!

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