No hay punto de secuencia con el operador <<
por lo que el compilador puede evaluar primero la función dequeue
primero. Lo que está garantizado es que el resultado de la segunda llamada dequeue
(en el orden en el que aparece en la expresión y no necesariamente en el orden en que se evalúa) es <<
'ed al resultado de <<
' el primero (si consigue lo que estoy diciendo).
Así que el compilador puede traducir su código a algo como cualquiera de estos (pseudo intermedio C++). Esto no pretende ser una lista exhaustiva.
auto tmp2 = myQueue.dequeue();
auto tmp1 = myQueue.dequeue();
std::ostream& tmp3 = cout << tmp1;
tmp3 << tmp2;
o
auto tmp1 = myQueue.dequeue();
auto tmp2 = myQueue.dequeue();
std::ostream& tmp3 = cout << tmp1;
tmp3 << tmp2;
o
auto tmp1 = myQueue.dequeue();
std::ostream& tmp3 = cout << tmp1;
auto tmp2 = myQueue.dequeue();
tmp3 << tmp2;
Esto es lo que los provisionales corresponden a la expresión original.
cout << myQueue.dequeue() << myQueue.dequeue();
| | | | |
| |____ tmp1 _____| |_____ tmp2 ____|
| |
|________ tmp3 _________|
¿A dónde fueron todas las respuestas? ahora solo hay uno? – finiteloop
Los respondedores los borraron porque se dieron cuenta de que estaban equivocados. –
Algunas personas eliminan las respuestas cuando descubren que están equivocadas. –