运算符没有序列点,<<
因此编译器可以先评估任dequeue
一函数。可以保证的是,第二次dequeue
调用的结果(按照它在表达式中出现的顺序,而不一定是计算它的顺序)被<<
'ed 到第一个调用的结果<<
(如果你得到我'我说)。
因此,编译器可以自由地将您的代码翻译成任何类似的东西(伪中间 c++)。这并不是一个详尽的列表。
auto tmp2 = myQueue.dequeue();
auto tmp1 = myQueue.dequeue();
std::ostream& tmp3 = cout << tmp1;
tmp3 << tmp2;
或者
auto tmp1 = myQueue.dequeue();
auto tmp2 = myQueue.dequeue();
std::ostream& tmp3 = cout << tmp1;
tmp3 << tmp2;
或者
auto tmp1 = myQueue.dequeue();
std::ostream& tmp3 = cout << tmp1;
auto tmp2 = myQueue.dequeue();
tmp3 << tmp2;
这是原始表达式中的临时对象对应的内容。
cout << myQueue.dequeue() << myQueue.dequeue();
| | | | |
| |____ tmp1 _____| |_____ tmp2 ____|
| |
|________ tmp3 _________|