C++ 标准说([except.handle]/9):
如果找不到匹配的处理程序,则调用函数std :: terminate(); 在对std :: terminate()的调用是否为实现定义之前,是否展开堆栈
例如,下面的代码行为(是否打印S::~S())是实现定义的:
struct S {
S() { std::cout << "S::S()" << std::endl; }
~S() { std::cout << "S::~S()" << std::endl; }
};
int main() {
S s;
throw std::runtime_error("exception");
}
Run Code Online (Sandbox Code Playgroud)
我想深入了解:为什么要定义实现?std::terminate()如果异常未被捕获(与try{ ... } catch(...) { throw; }顶级函数类似),为什么在调用异常之前,为什么上下文不能被取消?一目了然,这种行为与RAII的一致性更加清晰和安全.