名稱空間
變體
操作

std::unexpected

來自 cppreference.com
< cpp‎ | 錯誤
定義於標頭檔案 <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++11 中已廢棄)(C++17 中已移除)
std::unexpected 呼叫的函式型別
(typedef) [編輯]