Non esiste un punto di sequenza con l'operatore <<
in modo che il compilatore sia libero di valutare prima la funzione dequeue
. Ciò che è garantito è che il risultato della seconda chiamata dequeue
(nell'ordine in cui appare nell'espressione e non necessariamente nell'ordine in cui viene valutata) è <<
'ed al risultato di <<
'il primo (se prendi quello che sto dicendo).
Quindi il compilatore è libero di tradurre il tuo codice in qualcosa come uno di questi (pseudo intermedio C++). Questo non vuole essere un elenco esaustivo.
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;
Ecco quello che i provvisori corrispondono nell'espressione originale.
cout << myQueue.dequeue() << myQueue.dequeue();
| | | | |
| |____ tmp1 _____| |_____ tmp2 ____|
| |
|________ tmp3 _________|
fonte
2010-01-24 22:48:52
dove sono andate tutte le risposte? ora ce n'è solo uno? – finiteloop
Gli intervistati li hanno cancellati perché si sono resi conto che si sbagliavano. –
Alcune persone eliminano le risposte quando scoprono che si sbagliano. –