Maison >développement back-end >C++ >Quelles opérations sont autorisées sur les objets de bibliothèque standard déplacés en C ?

Quelles opérations sont autorisées sur les objets de bibliothèque standard déplacés en C ?

DDD
DDDoriginal
2024-12-25 11:50:40349parcourir

What Operations Are Permissible on Moved-From Standard Library Objects in C  ?

Opérations sur les objets déplacés

Malgré l'idée fausse courante selon laquelle les objets déplacés ne peuvent être détruits que, la norme C précise que les objets déplacés -from les objets des types de bibliothèques standard sont placés dans un état non spécifié, permettant une portée limitée des opérations. Cet état apparaît après le déplacement d'un objet, permettant des opérations qui n'ont généralement pas de conditions préalables.

Opérations inconditionnelles

Les opérations suivantes peuvent généralement être appliquées aux objets déplacés. objets sans rencontrer de conditions préalables :

  • Destruction : Désallocation de l'objet mémoire.
  • Affectation : Définition d'un objet déplacé comme valeur d'un autre objet.
  • Observations constantes : Accès à des informations telles que les fonctions getter , tailles de tableau et booléens de vide.

Conditionnel Opérations

En revanche, les opérations suivantes peuvent nécessiter que l'objet ne soit pas dans un état non spécifié et ne sont donc généralement pas autorisées sur les objets déplacés :

  • Déréférence : Accéder aux composants internes de l'objet via des pointeurs ou références.
  • Mutation : Apporter des modifications aux champs de l'objet.

Concernant std::swap

Dans Dans l'exemple de modèle de fonction d'échange, les opérations d'affectation (lignes 2 et 3) sont valides même si elles impliquent des objets déplacés, car l'affectation ne le fait généralement pas. avoir des conditions préalables.

Enfin

La norme détaillant les objets à état non spécifié pour les types de bibliothèques standard se trouve à 17.6.5.15 [lib.types.movedfrom].

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!

Déclaration:
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