std::unexpected_handler

出自cppreference.com
< cpp‎ | error
在標頭 <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
(函數) [編輯]