2016-01-06 97 views
6

C++ 14標準定義瞭如下的std::map查找()成員功能:爲什麼std :: map find()沒有聲明爲noexcept?

iterator find(const key_type& x); 
const_iterator find(const key_type& x) const; 

爲什麼這些功能沒有被定義爲noexcept?那裏面可能會出現什麼問題,這需要拋出一個異常或產生未定義的行爲(除了找不到元素,在這種情況下函數返回一個迭代器並且不需要異常拋出)?

+4

相關:http://stackoverflow.com/questions/20517259/why-vector-access-operators-are-not-specified-as-noexcept – NathanOliver

+0

我不認爲'比較'功能的地圖必須是noexept,所以我不認爲'find()'可能是noexept,因爲它比較了密鑰 – 88877

+0

@ 88877當然,'Compare'可以確實拋出:''23.2.4.1.1' C++ 14 states'erase k)不會拋出異常,除非該容器的比較對象(如果有)引發該異常。「請讓您的評論成爲答案。 – PowerGamer

回答

4

find()基於地圖的Compare()方法,可能會拋出異常(想象一下複雜鍵可能不正確)。所以,我們不能確定find()不會引發異常。

相關問題