C++ の例外ハンドラには次の 3 つのキーワードがあります。
try
catch
throw
try ブロックとは、例外が発生する可能性のある、通常中括弧 { } で囲まれた C++ 文の集まりです。このグループ化のため、例外ハンドラは try ブロック内で生成された例外だけを扱うことができます。各 try ブロックには、対応する catch ブロックが 1 つ以上存在します。
catch ブロックとは、特別に送出された例外を処理するために使用される C++ 文の集まりです。複数の catch ブロック (つまりハンドラ) が try ブロックの後に置かれます。catch ブロックは次の項目からなります。
キーワード catch
try ブロックから送出される可能性のある例外の型に対応した、括弧 ( ) に囲まれた catch パラメータ
例外を処理するための、中括弧 { } で囲まれた文の集まり
throw 文は、次の例外ハンドラに例外とその値を送出するために使用されます。通常のthrow ブロックは、キーワード throw と式から構成されます。式の結果の型によって、どの catch ブロックに制御が移るかが決まります。catch ブロック内では、現在の例外と値は throw キーワードだけ (式は不要) で再送出できます。
この例では、try ブロック中の関数呼び出しは f() に制御を渡します。f() は Overflow 型の例外を送出します。この例外は、Overflow 型の例外を処理する catch ブロックによって処理されます。
class Overflow {
// ...
public:
Overflow(char,double,double);
};
void f(double x)
{
// ...
throw Overflow('+',x,3.45e107);
}
int main() {
try {
// ...
f(1.2);
//...
}
catch(Overflow& oo) {
// Overflow 型の例外をここで処理する
}
}