私は C++ を学んでいて、今は例外処理のトピックに取り組んでいます。この本には、例外リストの例外以外は関数から出られないと書かれているので、テストしたところ、例外がキャッチされずにプログラムが終了することが予想されました。問題は、例外リストが無視されることです。どうすればこれに対処できますか?
int diva(int a, int b)
throw(int, runtime_error)
{
if (b == 0)
throw invalid_argument("div by 0");
return a/b ;
}
int main(int argc, char* argv[])
{
set_terminate(errnote);
try {
diva(4,0);
} catch(const invalid_argument& e) {
cout<<e.what()<<endl;
}
}
プログラムは引き続き実行され、例外は引き続きキャッチされます。
警告も表示されます:
警告 1 警告 C4290: 関数が __declspec(nothrow) c:\users\siegfred\documents\visual studio 2012\projects\procpp\procpp\maindriver.cpp 20 1 ProCpp ではないことを示す場合を除いて、C++ 例外仕様は無視されました