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!