私は例外処理(つまり、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( ... ) { };