抛出异常会发生什么?

时间:2010-06-17 20:14:09

标签: c++ exception

我有一些技术问题。在这个功能中:

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

如果我抛出异常程序会发生什么?我的功能会终止还是会进一步运行?如果它终止,它将返回什么价值?

6 个答案:

答案 0 :(得分:13)

如果抛出异常,所有函数将退出到找到具有匹配try...catch类型的catch块的位置。如果未在try块中调用函数,则程序将以未处理的异常退出。

查看https://isocpp.org/wiki/faq/exceptions了解详情。

答案 1 :(得分:6)

它基本上会在堆栈中找到异常处理程序;如果它没有找到一个到达堆栈的末尾,你的程序将崩溃。如果它 找到一个,它将在该点回卷堆栈,运行处理程序,并在处理程序块之后继续执行代码,不管你的堆栈是多远。

您可以通过Google获取有关C ++异常处理机制的各种详细信息。 Here's a head start

答案 2 :(得分:4)

由于您没有在函数的上下文中捕获异常,因此函数将终止并且堆栈将在查找异常处理程序(一个匹配字符串或一般catch的catch块)时展开( ...))。如果找不到,您的程序将终止。

答案 3 :(得分:3)

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

答案 4 :(得分:1)

它不会返回,它实际上会终止并到达“最近的”(call-stack-wise)try...catch块。 如果没有找到,大多数时候程序刚退出,在某些平台上可以打印错误,我不知道具体的那些(并且很可能只是从std :: exception派生的那些)。

答案 5 :(得分:1)

这可能是理解异常的一个很好的起点。 Exception handling in C++