try(C++)
カテゴリ
構文
try compound-statement handler-list
説明
try キーワードは C++ プログラムでのみサポートされています。C プログラムでは __try を使用してください。C++ では __try も使用できます。
例外が発生する可能性があるコード ブロックの前には、try キーワードを付ける必要があります。try キーワードの後には、中かっこ()で囲まれたコード ブロックを置きます。これによりプログラムで例外発生を検出し、例外に応じた処理を実行することができます。例外が発生した場合は、プログラム フローが中断され、次の手順が実行されます。
- プログラムが対応するハンドラを検索する
- ハンドラが見つかった場合はスタックがその点で解放される
- プログラムの制御がハンドラに渡される
ハンドラが検出されない場合、プログラムは terminate 関数を呼び出します。例外が送出されない場合、プログラムは通常どおり実行されます。
例
以下のコードは、try/__finally 構文の使い方を示しています。
#include <stdio.h>
#include <string.h>
#include <windows.h>
class Exception
{
public:
Exception(char* s = "Unknown"){what = strdup(s); }
Exception(const Exception& e ){what = strdup(e.what); }
~Exception() {free(what); }
char* msg() const {return what; }
private:
char* what;
};
int main()
{
float e, f, g;
try
{
try
{
f = 1.0;
g = 0.0;
try
{
puts("Another exception:");
e = f / g;
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
puts("Caught a C-based exception.");
throw(Exception("Hardware error: Divide by 0"));
}
}
catch(const Exception& e)
{
printf("Caught C++ Exception: %s :\n", e.msg());
}
}
__finally
{
puts("C++ allows __finally too!");
}
return e;
}
上のプログラムを実行すると、次の結果になります。
Another exception: Caught a C-based exception. Caught C++ exception[Hardware error: Divide by 0] C++ allows __finally too!