[英]Is it safe to use the throw() suffix on a function containing std::string?
我有一個不拋出任何東西的成員函數,所以我將throw()
后綴附加到它的末尾,表明它不會拋出任何異常。
我的問題是,在功能我使用幾個std::string
,並讓說,不順心的事在初始化std::string
,它拋出bad_alloc
或out_of_range
(或者還有什么可以永遠去錯了性病::串)。
仍然添加throw()
后綴仍然是安全的嗎?
無論您是否編寫,異常規范都會對函數內部運行的所有代碼做出承諾。
如果std::string
從函數內部拋出,那么該promise將被破壞,並且您的程序將失敗。 ( std::unexpected
異常,通常意味着你的程序很難終止)
只有在以下情況下, throw()
規范才適用:
要么
兩件事情。
首先: throw()
規范添加一個運行時檢查函數不拋出,如果promise被破壞則調用std::unexpected_exception
,這將終止程序。
第二:不建議使用throw()
,並且在C ++ 11中已棄用。 在C ++ 11中,您可以使用noexcept
(或者更具延展性的形式noexcept(boolean-expression)
)。 沒有創建運行時檢查,如果函數拋出,則行為未定義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.