25章 例外機構
http://www.geocities.jp/ky_webid/cpp/language/025.html
例外の処理です。前回にちょろっと出てきましたね。
tryブロックで囲ったスコープ内でエラーが発生したら、そのエラーの種別毎にcatchブロックで処理を続行させることができます。
まずはシンプルな例外処理の例を実装しています。
#include <iostream> using namespace std; int main () { try { throw "error dayo"; } catch ( const char* err ) { cout << err << endl; } return 0; }
$ main error dayo
throwキーワードというもので明示的にエラーを発生させることができます。
また、
throwキーワードがなくても、C++ の言語仕様として、あるいは、標準ライブラリが例外をスローする場面があります。例えば、new によるメモリ確保が失敗したとき、std::bad_alloc という例外をスローします。
とあるように、様々な例外が投げられるようです。他にどんなものが存在するかは後の章で紹介があるとのことです。
catchにはthrowで投げられた型を指定することができます。最初の例ではchar*型でしたが、他の型でもいけるようです。
また、複数のcatchを指定しておくことでどれかのcatchにマッチしたらそのcatchブロックの処理が呼ばれるといった感じになります。
#include <iostream> using namespace std; int main () { try { throw 100; // int型でthrow } catch ( const char* err ) { // ここには来ない cout << "char: " << err << endl; } catch ( int num ) { // こっちに来る cout << "int: " << num << endl; } return 0; }
$ main int: 100
intの方のcatchブロックに遷移してるのがわかりますね。