我有一些技术问题。在这个函数中:
string report() const {
if(list.begin() == list.end()){
throw "not good";
}
//do something
}
如果我抛出异常,程序会发生什么?我的函数会终止还是会继续运行?如果它终止了,它会返回什么值?
catch
类型的try...catch
块。如果你的函数没有在try
块中被调用,程序将会因为未处理异常而退出。该程序将一直向上查找堆栈,直到找到异常处理程序;如果它在找不到处理程序时到达堆栈的末尾,您的程序将崩溃。如果它找到一个处理程序,它将倒回堆栈到该点,并运行处理程序,在处理程序块后面的代码中继续执行,无论在堆栈上该点有多远。
您可以通过谷歌获得有关C ++异常处理机制的各种详细信息。这里是一个入门。
由于您没有在函数上下文中捕获异常,因此该函数将终止并且堆栈将被展开以寻找异常处理程序(匹配字符串或通用catch(...)的catch块)。如果没有找到,则您的程序将终止。
它不会返回,实际上会终止并到达“最近”的(在调用堆栈方面)try...catch
块。
如果找不到任何一个,大多数情况下程序只是退出,在某些平台上错误可能会被打印出来,但我不知道具体情况(很可能只有从std::exception派生的情况)。