名前空間
変種
操作

std::unexpected_handler

From cppreference.com
< cpp‎ | error
 
 
 
ヘッダー <exception> で定義
typedef void ( *unexpected_handler )();
(C++11で非推奨)
(C++17で削除)

std::unexpected_handler は、関数 std::set_unexpected および std::get_unexpected によってインストールおよび照会され、関数 std::unexpected によって呼び出される、関数ポインタ型(引数なしで void を返す関数へのポインタ)です。

C++ 実装はデフォルトの std::unexpected_handler 関数を提供しており、これは std::terminate() を呼び出します。NULL ポインタ値がインストールされている場合(std::set_unexpected を介して)、実装はデフォルトのハンドラを復元することがあります。

ユーザー定義の std::unexpected_handler は、プログラムを終了するか、例外をスローすることが期待されます。例外をスローした場合、以下の 3 つの状況のいずれかに遭遇する可能性があります。

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 を取得する
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)