J'ai parcouru cette page mais je ne suis pas en mesure d'en obtenir la même raison. Là, il est mentionné que
"il est plus judicieux pour lui de ne renvoyer aucune valeur et de demander aux clients d'utiliser front () pour inspecter la valeur au début de la file d'attente"
Mais l'inspection d'un élément depuis front () nécessitait également que cet élément soit copié dans lvalue. Par exemple dans ce segment de code
std::queue<int> myqueue;
int myint;
int result;
std::cin >> myint;
myqueue.push (myint);
/ * ici temporaire sera créé sur RHS qui sera affecté au résultat, et dans le cas où si retourne par référence, le résultat sera rendu invalide après l'opération pop * /
result = myqueue.front(); //result.
std::cout << ' ' << result;
myqueue.pop();
sur la cinquième ligne, l' objet cout crée d'abord une copie de myqueue.front () puis l'affecte au résultat. Alors, quelle est la différence, la fonction pop aurait pu faire la même chose.
front()
exigeait également que cet élément soit copié dans lvalue" - non, ce n'est pas le cas. front
renvoie une référence, pas une valeur. Vous pouvez inspecter la valeur à laquelle elle fait référence sans la copier.
pop()
. Si vous utilisez, std::queue<T, std::list<T>>
il n'y a aucun problème à ce que la référence fournie front()
soit invalidée par un push()
. Mais vous devez connaître votre modèle d'utilisation et documenter vos contraintes.
void std::queue::pop();
).