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
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!