Maison > développement back-end > C++ > Pourquoi l'affectation automatique n'est-elle pas autorisée pour les conteneurs de bibliothèque standard dans C 11 ?

Pourquoi l'affectation automatique n'est-elle pas autorisée pour les conteneurs de bibliothèque standard dans C 11 ?

Patricia Arquette
Libérer: 2024-11-16 02:49:03
original
416 Les gens l'ont consulté

Why is Self Move Assignment Not Allowed for Standard Library Containers in C  11?

Assignation d'auto-déplacement dans les conteneurs de bibliothèque standard

La norme C 11 garantit que l'affectation d'auto-déplacement (affectation d'un objet à lui-même après son exécution) été déplacé) n'est pas possible pour les conteneurs de bibliothèque standard comme std::vector.

La disposition spécifique de la norme se trouve dans [res.on.arguments], qui stipule que les arguments de fonction liés aux références rvalue sont considérés comme des références uniques à leur argument lié. Cela signifie que l'implémentation peut supposer que l'argument ne fait pas référence au même objet que la cible de l'affectation.

Dans le cas de std::vector, l'opérateur d'affectation de déplacement (operator=) est défini pour prenez une référence rvalue. Par conséquent, lorsque selfAssign() est appelé avec un argument std::vector, la norme permet à l'implémentation de supposer que l'argument est une référence unique à un objet temporaire. Par conséquent, l'affectation de déplacement automatique n'est pas possible et le std::vector sera laissé dans un état sans ressource (capacité 0).

Cependant, il est important de noter que ce comportement n'est garanti que pour conteneurs de bibliothèque standard. Pour les types définis par l'utilisateur, la norme C 11 ne fournit aucune garantie concernant l'affectation automatique des déplacements.

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