運算符<<
沒有序列點,因此編譯器可以自由地首先評估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