try、キャッチしてスローします (C++)をステートメント
C++ 例外はを使用しキーワードをキャッチしをスローします。
throw 式はエラーまたは例外条件に通知します。throw 式のオペランドとして任意の型のオブジェクトを使用できます。このオブジェクトは通常エラーに関する情報を伝えるために使用されます。通常std を使用する必要があります :: それらが適切である標準ライブラリで定義されている派生クラスの例外クラスまたは 1 つが std からまたは独自の例外クラスを取得します :: 例外。
try ブロックは例外をスローする可能性のある一つ以上のステートメントが含まれます。
一つ以上の catch ブロックはtry ブロックに従います。各 catch ブロックが処理できる例外の種類を指定します。
次の構文はこの例の try ブロックとハンドラーを示しています。GetNetworkResource() がネットワーク上のデータを接続する要求し2 種類の例外の種類の例外を catch ステートメントの参照渡しされること std:: 例外 のノードから派生したユーザー定義クラスであると仮定します :
MyData md;
try {
// code that could throw an exception
md = GetNetworkResource();
}
catch (networkIOException& e) {
// code that executes when an exception of type
// networkIOException is thrown in the try block
//…
// Log error message in the exception object.
cerr << e.what();
}
catch (myDataFormatException& e) {
// code that handles another exception type
//…
cerr << e.what();
}
// The following syntax shows a throw expression:
MyData GetNetworkResource()
{
//...
if(IOSuccess == false)
throw networkIOException("Unable to connect");
//...
if(readError)
throw myDataFormatException("Format error");
// ...
}
解説
try の句を使用してコードの保護されたセクションの後。throw 式 () に例外をスローします。catch 句が例外ハンドラーの後にコード ブロックはスローおよびキャッチ式の型に互換性がある場合 (処理する) throw 式によってスローされた例外をキャッチします。catch ブロックの型を決定する規則の一覧については___ を参照してください。catch ステートメントが型ではなく ... 省略記号 () を指定した場合はcatch ブロックはC の例外とシステムまたはメモリ保護および浮動小数点除算し違反を持つ例外の種類などのアプリケーション生成された例外処理します。catch ブロックはプログラムの順序で行われるためこのようなハンドラーは try ブロックの最後のハンドラーにする必要があります。catch を使用します (…) 意図的に ; 通常このような catch ブロックにエラーが記録されプログラムの実行を停止する特別なクリーンアップを実行するために使用されます。キャッチした例外を処理する方法を catch ブロックがわからない場合はプログラムが正しくない注意してください。
オペランドを再スローしますが現在処理されている例外を スローする式 。このような式は catch ハンドラーだけまたは内で呼び出された関数で catch ハンドラーから表示されます。再スローされた例外オブジェクトは元の例外オブジェクトではなくコピー) です。次に例を示します。
try {
throw CSomeOtherException();
}
catch(...) { // Catch all exceptions – dangerous!!!
// Respond (perhaps only partially) to exception
throw; // Pass exception to some other handler
}