最終更新日時(UTC):
が更新

履歴 編集

class
<exception>

std::bad_exception

namespace std {
  class bad_exception : public exception;
}

概要

bad_exceptionは、不正な例外操作が行われた際に発生する例外クラスである。

動的例外仕様に違反した例外送出に対する例外 (C++14まで)

動的例外仕様をもつ関数において、指定外の例外型を送出した際に、bad_exception例外が発生する。

この場合のbad_exception例外オブジェクトは自動で送出されるわけではなく、ユーザー自身がunexpected_handlerを指定してその中で例外オブジェクトの再送出を行うことで、bad_exception例外が送出される。

例外オブジェクトをコピーする際に例外が送出されたことに対する例外 (C++11)

std::current_exception()関数を呼び出した際、現在発生している例外オブジェクトのコピーに失敗した場合に、無限再帰を回避するために実装がbad_exception例外を送出する可能性がある。

備考

メンバ関数

名前 説明 対応バージョン
bad_exception() noexcept; bad_exception(const bad_exception&) noexcept; コンストラクタ
virtual ~bad_exception() = default; デストラクタ
bad_exception& operator=(const bad_exception&) noexcept; 代入演算子
virtual const char* what() const noexcept; 実装定義のエラー内容を取得する

動的例外仕様に違反した例外を送出する例 (C++14まで)

#include <exception>
#include <stdexcept>
#include <iostream>

void user_unexpected()
{
  throw;
}

void not_runtime_error_throw() throw(std::runtime_error, std::bad_exception)
{
  throw std::invalid_argument("throw invalid_argument.");
}

int main()
{
  std::set_unexpected(user_unexpected);

  // std::runtime_error以外を送出
  try {
    not_runtime_error_throw();
  }
  catch (std::runtime_error& ex) {
    std::cout << "caught: " << ex.what() << std::endl;
  }
  catch (std::bad_exception& ex) {
    std::cout << "caught: bad_exception." << std::endl;
  }
}

出力

caught: bad_exception.

関連項目