当我抛出异常时会发生什么?

9

我有一些技术问题。在这个函数中:

string report() const {
    if(list.begin() == list.end()){
        throw "not good";
    }
    //do something
}

如果我抛出异常,程序会发生什么?我的函数会终止还是会继续运行?如果它终止了,它会返回什么值?


8
你的C++教材对此有何看法? - anon
5个回答

15
如果你抛出一个异常,所有的函数将会退出直到找到一个匹配catch类型的try...catch块。如果你的函数没有在try块中被调用,程序将会因为未处理异常而退出。
更多信息请访问https://isocpp.org/wiki/faq/exceptions

6

该程序将一直向上查找堆栈,直到找到异常处理程序;如果它在找不到处理程序时到达堆栈的末尾,您的程序将崩溃。如果它找到一个处理程序,它将倒回堆栈到该点,并运行处理程序,在处理程序块后面的代码中继续执行,无论在堆栈上该点有多远。

您可以通过谷歌获得有关C ++异常处理机制的各种详细信息。这里是一个入门


4

由于您没有在函数上下文中捕获异常,因此该函数将终止并且堆栈将被展开以寻找异常处理程序(匹配字符串或通用catch(...)的catch块)。如果没有找到,则您的程序将终止。


包含像已分配的对象将被调用解除分配器之类的内容,+1 包括提到回滚。 - Greg Domjan
只有在找到 catch 块之后,堆栈展开才会开始。 - orodbhen

3
您的函数将立即终止,并且不会返回任何内容。如果没有捕获异常“沿着调用链”的catch语句,您的应用程序将终止。

1

它不会返回,实际上会终止并到达“最近”的(在调用堆栈方面)try...catch块。 如果找不到任何一个,大多数情况下程序只是退出,在某些平台上错误可能会被打印出来,但我不知道具体情况(很可能只有从std::exception派生的情况)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接