Maison >développement back-end >C++ >Pourquoi `std::queue::pop()` ne renvoie-t-il pas l'élément sauté ?
Pourquoi std::queue::pop() ne renvoie-t-il pas de valeur ?
L'absence de valeur de retour dans std : :queue::pop() découle du besoin de sécurité face aux exceptions.
La question originale souligne que l'inspection d'un élément depuis std::queue::front() implique toujours de copier l'élément. Cependant, la différence cruciale réside dans le potentiel d'exceptions pendant le processus de copie.
Considérez une implémentation de std::queue::pop() qui renvoie l'élément sauté :
template<class T> class queue { T pop() { auto x = elements[top_position]; --top_position; // alter queue state return x; // calls T(const T&) which may throw } };
Si le constructeur de copie de T lance au retour, l'état de la file d'attente a déjà été modifié, mais l'élément n'est pas renvoyé. Cela pourrait entraîner une perte de données.
De plus, une telle implémentation est inefficace si la valeur extraite n'est pas nécessaire, car elle crée une copie inutile.
Par conséquent, pour garantir la sécurité et l'efficacité, std ::queue::pop() a été conçue comme une fonction vide, obligeant les clients à utiliser std::queue::front() pour inspecter la valeur sans créer de copie.
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!