Il n'y a pas de point de séquence avec l'opérateur <<
donc le compilateur est libre d'évaluer d'abord la fonction dequeue
. Ce qui est garanti est que le résultat du deuxième appel dequeue
(dans l'ordre dans lequel il apparaît dans l'expression et pas nécessairement dans l'ordre dans lequel il est évalué) est <<
'au résultat de <<
' obtenez ce que je dis).
Ainsi, le compilateur est libre de traduire votre code en quelque chose comme l'un de ceux-ci (pseudo intermédiaire C++). Ceci n'est pas destiné à être une liste exhaustive.
auto tmp2 = myQueue.dequeue();
auto tmp1 = myQueue.dequeue();
std::ostream& tmp3 = cout << tmp1;
tmp3 << tmp2;
ou
auto tmp1 = myQueue.dequeue();
auto tmp2 = myQueue.dequeue();
std::ostream& tmp3 = cout << tmp1;
tmp3 << tmp2;
ou
auto tmp1 = myQueue.dequeue();
std::ostream& tmp3 = cout << tmp1;
auto tmp2 = myQueue.dequeue();
tmp3 << tmp2;
Voici ce que les correspondent aux temporaires l'expression originale.
cout << myQueue.dequeue() << myQueue.dequeue();
| | | | |
| |____ tmp1 _____| |_____ tmp2 ____|
| |
|________ tmp3 _________|
où toutes les réponses sont-elles allées? maintenant il n'y en a qu'un? – finiteloop
Les répondeurs les ont supprimés parce qu'ils se sont rendu compte qu'ils avaient tort. –
Certaines personnes suppriment des réponses lorsqu'elles découvrent qu'elles ont tort. –