<<
연산자에는 시퀀스 포인트가 없으므로 컴파일러는 먼저 dequeue
함수를 자유롭게 평가할 수 있습니다. 보장되는 것은 두 번째 dequeue
호출의 결과 (표현식에 나타나는 순서와 반드시 평가되는 순서가 아님)가 <<
이고 결과가 <<
인 경우입니다. 내가 말하는 것을 얻으십시오).
그래서 컴파일러는 코드를 자유롭게 (pseudo intermediate C++) 같은 코드로 변환 할 수 있습니다. 이것은 철저한 목록이 아닙니다.
auto tmp1 = myQueue.dequeue();
std::ostream& tmp3 = cout << tmp1;
auto tmp2 = myQueue.dequeue();
tmp3 << tmp2;
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;
또는
다음은 임시직 원래 식에 해당하는 것입니다.
cout << myQueue.dequeue() << myQueue.dequeue();
| | | | |
| |____ tmp1 _____| |_____ tmp2 ____|
| |
|________ tmp3 _________|
으로 표시된
operator<<
함수 호출의 순서는 잘 지정되어 있습니다. 모든 응답은 어디로 갔습니까? 지금은 단 하나 뿐인가? – finiteloop답변자가 실수로 인해 응답자가이를 삭제했습니다. –
어떤 사람들은 잘못되었을 때 대답을 삭제합니다. –