首頁 >後端開發 >C++ >為什麼此 C 代碼會列印'ba”而不是'ab”?

為什麼此 C 代碼會列印'ba”而不是'ab”?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-31 16:01:10917瀏覽

Why Does This C   Code Print

揭開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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn