大家好我遇到一些困难,理解下面的代码处理未捕获的异常,我有几个关于下面的例子的问题。C++处理未捕获的异常
1)只是想知道为什么输出是:“打电话给我的意外”和“抓坏表情”,而不是“打电话给我的意外”,“夹缝X”
2)什么throw(X,Y, bad_exception)
意味着“ void f()'函数。
3)是什么typedef void (*pfv)();
实际上意味着
class X { };
class Y { };
class A { };
typedef void (*pfv)();
void my_terminate() {
cout << "Call to my_terminate" << endl;
abort();
}
void my_unexpected() {
cout << "Call to my_unexpected" << endl;
throw;
}
void f() throw(X,Y, bad_exception) {
throw A();
}
void g() throw(X,Y) {
throw A();
}
int main()
{
pfv old_term = set_terminate(my_terminate);
pfv old_unex = set_unexpected(my_unexpected);
try {
cout << "In first try block" << endl;
f();
}
catch(X) {
cout << "Caught X" << endl;
}
catch(Y) {
cout << "Caught Y" << endl;
}
catch (bad_exception& e1) {
cout << "Caught bad_exception" << endl;
}
catch (...) {
cout << "Caught some exception" << endl;
}
}
遗憾的多个问题被问,希望有人能够在通俗地说向我解释。感谢和欣赏..
不!不要使用投掷规格。这通常被认为不适用于设置API。 –
@ g-makulik我不知道使用throw spec是不明智的,但我对C++超级新手,所以只是想知道为什么他们会是以下输出。 – user2975932
看看斯图尔特的答案。这很清楚,为什么使用throw规格(除了'nothrow'之外)使得提供良好的类接口不必要地复杂化。除了保证**'不要抛出任何异常'之外,任何事情都会使维护变得更加复杂,以至于一直处于不可预知的陷阱之中。 –