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」行正在執行。
然後逐行通過代碼行與調試器。 – LogicStuff
如果你不明白,那就意味着你正在處理太多的陳述。我建議你一次添加一個東西,然後看看事情是如何執行的,以及按照什麼順序。追加幾個'cout'來跟蹤路徑(特別是在'Error'的構造函數中)。 – Nawaz