2015-12-14 62 views
0
#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功能,但我不明白的是在其中得到执行堆栈的顺序,为什么抛出错误“hello error”行正在执行。

+0

然后逐行通过代码行与调试器。 – LogicStuff

+0

如果你不明白,那就意味着你正在处理太多的陈述。我建议你一次添加一个东西,然后看看事情是如何执行的,以及按照什么顺序。追加几个'cout'来跟踪路径(特别是在'Error'的构造函数中)。 – Nawaz

回答

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"输出