std::unexpected_handler
來自 cppreference.com
定義於標頭檔案 <exception> |
||
typedef void ( *unexpected_handler )(); |
(在 C++11 中已棄用) (在 C++17 中已移除) |
|
std::unexpected_handler
是函式指標型別(指向一個不帶引數且返回 void 的函式),透過函式 std::set_unexpected 和 std::get_unexpected 進行安裝和查詢,並由 std::unexpected 呼叫。
C++ 實現提供了一個預設的 std::unexpected_handler
函式,該函式會呼叫 std::terminate()。如果安裝了空指標值(透過 std::set_unexpected),則實現可能會恢復預設處理程式。
使用者定義的 std::unexpected_handler
預計會終止程式或丟擲異常。如果它丟擲異常,可能會遇到以下三種情況之一:
1) 由 std::unexpected_handler
丟擲的異常滿足之前被違反的動態異常規範。新的異常被允許逃逸函式,並且棧展開繼續。
2) 由 std::unexpected_handler
丟擲的異常仍然違反異常規範
2a) 然而,異常規範允許 std::bad_exception:丟擲的異常物件被銷燬,並且 C++ 執行時構造並丟擲 std::bad_exception 代替。
2b) 異常規範不允許 std::bad_exception:呼叫 std::terminate()。
[編輯] 參見
(C++11 中已廢棄)(C++17 中已移除) |
動態異常規範被違反時呼叫的函式 (函式) |
(C++11 中已廢棄)(C++17 中已移除) |
更改 std::unexpected 將呼叫的函式 (函式) |
(C++11 中已廢棄)(C++17 中已移除) |
獲取當前的 unexpected_handler (函式) |