爲什麼STL的容器提供了top和pop兩個函數,而沒有合併成一個函數?

STL的stack、queue等容器,提供了top和pop兩個獨立的函數,而沒有合併成一個函數,這是爲什麼呢?

首先,有一點很重要,即使容器爲空,pop也是不會拋出異常的,這可能是由於STL希望自己的適用場景更加廣泛,對於嵌入式以及向前兼容的代碼,不要求一定要用try catch寫代碼。

有了這個大前提,就不難明白爲什麼STL如此設計了:

1. 首要是異常安全(exception-safe),如果將top和pop的功能合在一起,則返回值只能是一個對象,而不是引用,因爲這個對象已經從容器裏面移除了。那麼,就至少會引起一次拷貝構造函數的調用(在引入移動構造函數之前),而拷貝構造函數可能會拋出異常。此外,如果是在函數返回的時候發生異常,top的元素已經被從容器移除了,而沒有被正確返回,無法再把容器恢復到調用前的狀態。

2. 其次是性能問題,合在一起,不能返回引用,不夠高效。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章