Maison > développement back-end > C++ > L'affectation automatique des mouvements est-elle possible avec les paramètres de référence Rvalue dans C 11 ?

L'affectation automatique des mouvements est-elle possible avec les paramètres de référence Rvalue dans C 11 ?

Mary-Kate Olsen
Libérer: 2024-11-10 13:52:02
original
721 Les gens l'ont consulté

Is Self Move Assignment Possible with Rvalue Reference Parameters in C  11?

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;
}
Copier après la connexion

Puisque l'argument vectoriel est lié à un paramètre de référence rvalue, l'implémentation de std::vector::operator=(vector&& other) peut supposer que other est un valeur. Par conséquent, l'auto-affectation n'est pas possible pour v dans la fonction selfAssign.

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!

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