我目前正在編寫異常安全的代碼,並且我的設計不需要爲 set :: find方法提供保證。 我假設比較對象總是成功。 它意味着set :: find方法會一直成功嗎?std :: set ::查找異常保證
在我看到http://en.cppreference.com/w/cpp/container/set/erase後,我想到了這樣一種可能性,set :: erase方法,具有相同的假設,應該總是成功,也許有一個發現它(然後它將definetely值得評論文檔!)
問題的直接來源是我需要檢查一個元素是否在一個集合中,並從集合中刪除它 - 所有沒有保證(它在一個catch塊中)。
我不確定標準或任何保證集或任何stl容器,但我會說這個..有一次我調用vector :: erase(v.end())..它拋出一個異常..我花了數小時試圖找出原因。原來我的矢量是空的。不知道這是否仍然發生,或者如果std :: set有這個問題,但它發生在我在gcc 4.8.1 for windows ..我結束了必須做一個if語句檢查,如果'vector :: find!= v.end ()'。我想你可能必須這樣做。這可能是唯一一次你沒有確定的例外嗎? – Brandon
@CantChoose這是一個未定義的行爲,對於一個空向量和一個非空向量一樣多。你不能抹掉第一個元素過去的結尾...... – IInspectable
@CantChooseUsernames你應該很高興它拋出一個異常。這是未定義行爲AFAIK,可能已經擦除了您的硬盤驅動器;) – dyp