为什么从类 A 的构造函数中抛出的以下异常会被捕获两次,第一次被构造函数本身的 catch 捕获,第二次被 main 函数中的 catch 捕获?
为什么它不被构造函数中的 catch 捕获一次?
#include <iostream>
using namespace std;
class E {
public:
const char* error;
E(const char* arg) : error(arg) { }
};
class A {
public:
int i;
A() try : i(0) {
throw E("Exception thrown in A()");
}
catch (E& e) {
cout << e.error << endl;
}
};
int main() {
try {
A x;
}
catch(...)
{
cout << "Exception caught" << endl;
}
}
如果我删除 main 函数中的 try-catch 块,程序将崩溃。这是输出:
Exception thrown in A()
terminate called after throwing an instance of 'E'
zsh: abort (core dumped) ./main
为什么在 main 函数中没有 try-catch 块它会崩溃?