演算子にはシーケンスポイントがない<<
ため、コンパイラはどちらのdequeue
関数も最初に自由に評価できます。保証されているのは、2番目の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 _________|