std::unexpected
來自 cppreference.com
定義於標頭檔案 <exception> |
||
void unexpected(); |
(C++11 前) | |
[[noreturn]] void unexpected(); |
(C++11 起廢棄) (在 C++17 中已移除) |
|
當動態異常規範被違反時,C++ 執行時會呼叫 `std::unexpected()`:即當從一個禁止該型別異常的函式中丟擲異常時。
`std::unexpected()` 也可以直接從程式中呼叫。
在這兩種情況下,`std::unexpected` 都會呼叫當前安裝的 std::unexpected_handler。預設的 std::unexpected_handler 會呼叫 std::terminate。
如果在棧展開過程中解構函式重置了非預期處理程式,且展開隨後導致 `unexpected` 被呼叫,那麼將呼叫在丟擲表示式結束時安裝的處理程式(注意:關於重新丟擲是否應用新處理程式這一點存在歧義)。 |
(C++11 前) |
如果在棧展開過程中解構函式重置了非預期處理程式,並且展開隨後導致 `unexpected` 被呼叫,則呼叫哪個處理程式是未指定的。 |
(C++11 起) |
[編輯] 異常
丟擲當前安裝的 std::unexpected_handler 丟擲的任何異常。
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 2111 | C++11 | 在棧展開期間呼叫 std::set_unexpected 的效果 與 C++98 不同,並破壞了一些 ABI |
變為未指定 |
[編輯] 參閱
(C++23) |
表示為意外值 (類模板) |
(C++11 中已廢棄)(C++17 中已移除) |
被 std::unexpected 呼叫的函式型別 (typedef) |