為什麼 std::queue::pop() 沒有回傳值?
std 中缺少回傳值: :queue::pop() 源自於面對異常時的安全需求。
最初的問題強調了檢查std::queue::front() 中的元素仍然涉及複製該元素。然而,關鍵的差異在於複製過程中可能出現異常。
考慮std::queue::pop() 的實現,它返回彈出的元素:
template<class T> class queue { T pop() { auto x = elements[top_position]; --top_position; // alter queue state return x; // calls T(const T&) which may throw } };
如果T 的複製構造函數在返回時拋出異常,則隊列狀態已被更改,但元素不會返回。這可能會導致資料遺失。
此外,如果不需要彈出的值,這樣的實作效率很低,因為它會建立不必要的副本。
因此,為了確保安全性和效率,std ::queue::pop() 被設計為void 函數,要求客戶端使用std::queue::front() 來檢查值而不建立副本。
以上是為什麼 `std::queue::pop()` 不回傳彈出的元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!