名稱空間
變體
操作

std::unexpected_handler

來自 cppreference.com
< cpp‎ | 錯誤
定義於標頭檔案 <exception>
typedef void ( *unexpected_handler )();
(在 C++11 中已棄用)
(在 C++17 中已移除)

std::unexpected_handler 是函式指標型別(指向一個不帶引數且返回 void 的函式),透過函式 std::set_unexpectedstd::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
(函式) [編輯]