Maison > développement back-end > C++ > le corps du texte

L'affectation automatique fonctionne-t-elle avec « std :: vector » dans la bibliothèque standard C ?

Barbara Streisand
Libérer: 2024-11-11 17:23:03
original
161 Les gens l'ont consulté

Does self-move assignment work with `std::vector` in the C   Standard Library?

Assignation d'auto-déplacement dans la bibliothèque standard C

En C 11, la norme apporte certaines garanties concernant l'affectation d'auto-déplacement, notamment au sein de la norme bibliothèque. Examinons ce qu'impliquent ces assurances.

Selon la section 17.6.4.9 de la norme C 11, sous la rubrique « Arguments de fonction », il est indiqué que si un argument de fonction est lié à un paramètre de référence rvalue, le l'implémentation peut supposer que cette référence est exclusive à l'argument.

Cela implique que dans l'implémentation de std::vector::operator=(vector&& other), il est permis de supposer que d'autres est une valeur. Par conséquent, si other est une valeur prvalue, l'auto-affectation de déplacement n'est pas réalisable.

Ce qui est susceptible de se produire, c'est que v sera rendu sans ressources (avec une capacité nulle). Cette action sera sans opération si v a déjà une capacité nulle.

Mise à jour :

Le brouillon de travail le plus récent (N4618) offre une définition plus précise du Exigences MoveAssignable. Il précise que l'expression t = rv (où rv est une valeur r) exige que t ne corresponde à la valeur de rv avant l'affectation que si elles ne font pas référence au même objet. Quoi qu'il en soit, l'état de rv devient indéterminé après l'affectation. Une note supplémentaire apporte des précisions supplémentaires :

"rv doit toujours répondre aux exigences du composant de bibliothèque qui l'utilise, que t et rv fassent ou non référence au même objet."

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