関数が有効な例外リストにない例外をスローした場合の標準的な動作は何ですか? たとえば、このコードを実行すると:
#include <iostream>
#include <cstdlib>
using namespace std;
void NotLegal() throw(char) {
throw 42;
}
void myunexpected () {
cout << "exception not in list\n";
cin.get();
exit(0);
}
int main()
{
set_unexpected(myunexpected);
try {
NotLegal();
}
catch(...) {
cout << "exception catched";
cin.get();
}
return 0;
}
GCC と Visual Studio C++ コンパイラでは動作が異なります。
- VS 2010 では、予期しない例外が一般的な例外ハンドラーでキャッチされます。
- GCC
unexpected()
では、例外をキャッチする代わりにハンドラー関数が呼び出されます。
この違いはなぜですか?unexpected()
MS C++ コンパイラがcallbackを呼び出さないのはなぜですか?