Assignation automatique des déplacements et bibliothèque standard
En C 11, la bibliothèque standard offre certaines garanties concernant l'affectation automatique des déplacements. Selon la norme, si un argument de fonction est lié à un paramètre de référence rvalue, l'implémentation peut supposer que le paramètre est une référence unique à cet argument.
Considérez la fonction suivante :
template<class T> std::vector<T> selfAssign(std::vector<T> v) { v = std::move(v); return v; }
Puisque l'argument vectoriel est lié à un paramètre de référence rvalue, l'implémentation de std::vector
La norme dicte qu'un paramètre de référence rvalue peut être supposé être une valeur pr, excluant ainsi la possibilité d'une auto-affectation dans de tels cas. Il est probable que le vecteur transmis à la fonction selfAssign sera laissé dans un état sans ressources ou subira une non-opération s'il a déjà 0 capacité.
Cependant, la dernière version de travail de la norme, N4618 , modifie légèrement ces exigences. Plus précisément, il indique que, si t et rv ne font pas référence au même objet, alors après l'affectation « t = rv », il se peut que t n'ait besoin que de contenir la valeur équivalente de rv avant l'affectation. Quoi qu'il en soit, l'état du rv reste indéterminé après l'affectation.
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!