1. ホーム
  2. c++

[解決済み】C++の例外を投げる方法

2022-03-26 11:21:40

質問

例外処理(throw, try, catch文を自分用にカスタマイズする方法)について、ほとんど理解していないのですが。

例えば、次のような関数を定義しています。 int compare(int a, int b){...}

この関数では、aかbのどちらかが負になったとき、何らかのメッセージとともに例外をスローするようにしたい。

関数の定義でどのようにアプローチすればよいのでしょうか?

どのように解決するのですか?

簡単です。

#include <stdexcept>

int compare( int a, int b ) {
    if ( a < 0 || b < 0 ) {
        throw std::invalid_argument( "received negative value" );
    }
}

標準ライブラリには 組み込みの例外オブジェクト を投げることができます。 常に値で投げて、参照でキャッチすることに留意してください。

try {
    compare( -1, 3 );
}
catch( const std::invalid_argument& e ) {
    // do stuff with exception... 
}

各 try の後に複数の catch() 文を記述できるので、必要に応じて異なる例外タイプを別々に処理することができます。

また、例外の再スローも可能です。

catch( const std::invalid_argument& e ) {
    // do something

    // let someone higher up the call stack handle it if they want
    throw;
}

そして、型に関係なく例外をキャッチすること。

catch( ... ) { };