C++ 例外をスローする方法 質問する

C++ 例外をスローする方法 質問する

私は例外処理(つまり、throw、try、catch ステートメントを自分の目的に合わせてカスタマイズする方法)についてほとんど理解していません。

たとえば、次のように関数を定義しました。int compare(int a, int b){...}

a または b のいずれかが負の場合に、何らかのメッセージとともに例外をスローする関数を希望します。

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

ベストアンサー1

単純:

#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... 
}

各試行の後に複数の catch() ステートメントを使用できるため、必要に応じて異なる例外タイプを個別に処理できます。

例外を再スローすることもできます:

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

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

型に関係なく例外をキャッチするには:

catch( ... ) { };

おすすめ記事