Réutilisation d'un conteneur déplacé : exploration du projet de norme C 0x
La question en question cherche à clarifier la méthode appropriée pour réutiliser un conteneur déplacé en C. Selon le projet de norme C 0x, un objet dans un « état valide mais non spécifié » permet des opérations qui ne nécessitent pas de conditions préalables à moins que ces conditions préalables ne soient d'abord vérifiées.
Considérez l'extrait de code fourni :
std::vector<int> container; container.push_back(1); auto container2 = std::move(container); // ver1: Do nothing //container2.clear(); // ver2: "Reset" container = std::vector<int>() // ver3: Reinitialize
Le conteneur vectoriel est déplacé vers le conteneur2, laissant le conteneur dans un état non spécifié. Selon la norme, cet état permet des opérations sans conditions préalables. Par conséquent, appeler clear sur conteneur2 (version 2) le ramènera à un état connu.
Alternativement, la réinitialisation du conteneur à l'aide de la version 3 permettra également d'obtenir le résultat souhaité. Cette méthode est légèrement plus détournée mais permet une optimisation potentielle. Cependant, cela peut également conduire à des erreurs.
Par conséquent, la bonne méthode pour réutiliser un conteneur déplacé est soit de l'effacer, soit de le réinitialiser. La version 2 est préférée car elle réinitialise explicitement le conteneur à un état connu et évite les pièges potentiels associés à la version 3.
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!