运算符<<
没有序列点,因此编译器可以自由地首先评估dequeue
函数。保证的是第二个dequeue
调用的结果(按其出现在表达式中的顺序,而不一定是它的评估顺序)是<<
'<<
'的结果(如果你得到我说的)。
所以编译器可以自由地将你的代码翻译成任何这些东西(伪中间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 _________|
所有答案都在哪里去了?现在只有一个? – finiteloop 2010-01-24 22:53:27
回答者删除了他们,因为他们意识到他们错了。 – 2010-01-24 22:54:55
有些人在发现错误时会删除答案。 – 2010-01-24 22:55:40