名前空間
変種
操作

exception specification

提供: cppreference.com
< cpp‎ | language

 
 
C++言語
一般的なトピック
フロー制御
条件付き実行文
繰り返し文 (ループ)
ジャンプ文
関数
関数宣言
ラムダ関数宣言
inline 指定子
例外指定 (C++20未満)
noexcept 指定子 (C++11)
例外
名前空間
指定子
decltype (C++11)
auto (C++11)
alignas (C++11)
記憶域期間指定子
初期化
代替表現
リテラル
ブーリアン - 整数 - 浮動小数点
文字 - 文字列 - nullptr (C++11)
ユーザ定義 (C++11)
ユーティリティ
属性 (C++11)
typedef 宣言
型エイリアス宣言 (C++11)
キャスト
暗黙の変換 - 明示的な変換
static_cast - dynamic_cast
const_cast - reinterpret_cast
メモリ確保
クラス
クラス固有の関数特性
特別なメンバ関数
テンプレート
その他
 
関数が直接または間接的に投げることに例外を示し.
Original:
Lists the exceptions that a function might directly or indirectly throw.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

目次

[編集] 構文

throw(typeid, typeid, ...) (非推奨)

[編集] 説明

関数がその例外指定にリストされているタイプのTで宣言された場合、この関数はその型またはそれから派生した型の例外をスローすることがあります.
Original:
If a function is declared with type T listed in its exception specification, the function may throw exceptions of that type or a type derived from it.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
関数は例外仕様にリストされていない型の例外をスローした場合、関数std::unexpectedが呼び出されます。デフォルトの関数はstd::terminate呼び出しますが、それはstd::set_unexpected呼び出したり、例外をスローすることができるユーザー定義関数(std::terminate経由)で置き換えることができる。 std::unexpectedからスローされた例外は、例外指定に受け入れられた場合、スタック巻き戻しは通常通り継続される。それはありませんが、std::bad_exceptionは例外指定が許可されている場合、std::bad_exceptionがスローされます。それ以外の場合は、std::terminateが呼び出されます.
Original:
If the function throws an exception of the type not listed in its exception specification, the function std::unexpected is called. The default function calls std::terminate, but it may be replaced by a user-provided function (via std::set_unexpected) which may call std::terminate or throw an exception. If the exception thrown from std::unexpected is accepted by the exception specification, stack unwinding continues as usual. If it isn't, but std::bad_exception is allowed by the exception specification, std::bad_exception is thrown. Otherwise, std::terminate is called.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

[編集]

class X {};
class Y {};
class Z : public X {};
class W {};
 
void f() throw(X, Y) 
{
    int n = 0;
    if (n) throw X(); // OK
    if (n) throw Z(); // also OK
    throw W(); // will call std::unexpected()
}


[編集] 参照