揭開C 語言中從左到右打印的神秘面紗
以下C 代碼的行為令人費解:
myQueue.enqueue('a'); myQueue.enqueue('b'); cout << myQueue.dequeue() << myQueue.dequeue();
令人驚訝的是,它在控制台上印製了“ba”,而不是預期的“ab”。為什麼會發生這種情況?
要解開這個謎團,我們需要了解重載
在我們的範例中,程式碼編譯為以下形式的表達式:
cout << ( (myQueue.dequeue()) << (myQueue.dequeue()) );
編譯器在每個出隊呼叫和遞歸呼叫結果周圍插入括號。然後,第二個出隊呼叫的結果將插入到第一個出列呼叫周圍的括號中。
理解該行為的關鍵是要認識到
( (myQueue.dequeue()) << (myQueue.dequeue()) ) << cout;
依照此順序,先計算第二個出隊調用,結果為「b」。然後該呼叫的結果被傳遞到
這解釋了為什麼程式碼列印「ba」而不是「ab」。
為了確保從左到右列印一致,應使用括號來明確控制計算順序,如下所示:
cout << (myQueue.dequeue()) << ' ' << (myQueue.dequeue());
以上是為什麼此 C 代碼會列印'ba”而不是'ab”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!