Es gibt keinen Sequenzpunkt mit dem Operator <<
, so dass der Compiler die Funktion dequeue
zuerst frei auswerten kann. Was garantiert ist, ist das Ergebnis des zweiten Aufrufs (in der Reihenfolge, in der es in dem Ausdruck erscheint und nicht notwendigerweise in der Reihenfolge, in der es ausgewertet wird) zu dem Ergebnis von <<
der erste (wenn Sie bekomme, was ich sage).
So der Compiler ist frei, um Ihren Code in etwas wie jede dieser zu übersetzen (Pseudo-Zwischenstufe C++). Dies soll keine erschöpfende Liste sein.
auto tmp2 = myQueue.dequeue();
auto tmp1 = myQueue.dequeue();
std::ostream& tmp3 = cout << tmp1;
tmp3 << tmp2;
oder
auto tmp1 = myQueue.dequeue();
auto tmp2 = myQueue.dequeue();
std::ostream& tmp3 = cout << tmp1;
tmp3 << tmp2;
oder
auto tmp1 = myQueue.dequeue();
std::ostream& tmp3 = cout << tmp1;
auto tmp2 = myQueue.dequeue();
tmp3 << tmp2;
Hier ist, was die Provisorien entsprechen in den ursprünglichen Ausdruck.
cout << myQueue.dequeue() << myQueue.dequeue();
| | | | |
| |____ tmp1 _____| |_____ tmp2 ____|
| |
|________ tmp3 _________|
markiert wo gingen alle Antworten hin? Jetzt gibt es nur einen? – finiteloop
Die Antwortenden löschten sie, weil sie erkannten, dass sie falsch lagen. –
Manche Leute löschen Antworten, wenn sie herausfinden, dass sie falsch liegen. –