以下代码与异常处理有关。我得到了输出:

Botch::f()
I'll be back!

为什么不抓水果?谢谢!

忽略这个。我想我已经提供了足够的细节。
#include <exception>
#include <iostream>
using namespace std;

void terminator() {
    cout << "I'll be back!" << endl;
    exit(0);
}

void (*old_terminate)() = set_terminate(terminator);

class Fruit {};

class Botch {
public:
    void f() throw(Fruit, bad_exception) {
        cout << "Botch::f()" << endl;
        throw Fruit();
    }
    ~Botch() { throw 'c'; }
};

int main() {
    try{
        Botch b;
        b.f();
    } catch(Fruit&) {
        cout << "inside catch(Fruit)" << endl;
    } catch(bad_exception&) {
        cout << "caught a bad_excpetionfrom f" << endl;
    }
}

最佳答案

不会捕获Fruit,因为代码永远不会到达该catch子句。在trymain块中,对b.f()的调用引发了Fruit类型的异常。作为响应,代码在进入catch子句之前会销毁Botch对象。 Botch的析构函数引发另一个异常,从而触发对terminate的调用。

关于c++ - 异常处理,C++中的意外终止符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16037929/

10-16 02:27