为什么这是异常堆栈的输出?

时间:2015-12-14 16:59:18

标签: c++ exception exception-handling

#include <string>
#include <iostream>
using namespace std;

class Error {
    string msg;
public:
    Error(string s) : msg(s) {} string get_msg()
    {
        return msg;
    }
};

void goodbye() {
    cout << "goodbye!\n";
    throw Error("goodbye error");
    cout << "goodbye() returns\n";
}

void hello()
{
    cout << "hello world!\n";
    try
    {
        goodbye();
    }
    catch (Error e)
    {
        throw Error("hello error");
    }
    cout << "hello() returns\n";
}

int main() {
    try {
    hello();
    cout << "done\n";
    }
    catch (Error e)
    {
        cout << e.get_msg() << endl;
    }
    catch (...)
    {
        cout << "Unknown error"
        << endl;
    }
    cout << "main() returns\n";
    return 0;
}

这是输出:

hello world!
goodbye!
hello error
main() returns

我知道主要进入hello函数,但我不明白的是堆栈执行的顺序以及抛出错误&#34; hello error&#34;线正在执行。

1 个答案:

答案 0 :(得分:0)

  • 执行hello函数
  • 输出
  • "hello world!"
  • 执行goodbye函数
  • 输出
  • "goodbye!"
  • Error("goodbye error");被抛出
  • 由于goodbye中没有异常处理程序,因此退出
  • Error("goodbye error");hello
  • 捕获
  • Error("hello error");被抛出
  • 由于hello中没有其他异常处理程序,因此退出
  • Error("hello error");位于主
  • 输出错误消息(hello error
  • 执行其余的主要内容
  • 输出
  • "main() returns"