C++异常处理如何处理异常派生类?

Mr.*_*Boy 6 c++ exception-handling

如果我抓住了,BaseException这还会捕获源自的异常BaseException吗?异常处理是否关心继承等,还是只匹配被捕获的确切异常类型?

class MyException {
...
};
class MySpecialException : public MyException {
...
};
Run Code Online (Sandbox Code Playgroud)
void test()
{
 try {
 ...
 }
 catch (MyException &e) {
   //will this catch MySpecialException?
 }
}
Run Code Online (Sandbox Code Playgroud)

chm*_*eee 5

C++异常处理将匹配异常子类.但是,它执行从第一个catch()到最后一个的线性搜索,并且只匹配第一个.因此,如果您打算同时捕获Base和Derived,则需要首先捕获(MySpecialException&).


Dmi*_*sov 5

用代码很容易解释:http : //ideone.com/5HLtZ

#include <iostream>

class ExceptionBase {
};

class MyException : public ExceptionBase {
};

int main()
{
    try
    {
        throw MyException();
    }
    catch (MyException const& e) {
        std::cout<<"catch 1"<<std::endl;
    }
    catch (ExceptionBase const& e) {
        std::cout<<"should not catch 1"<<std::endl;
    }

    ////////
    try
    {
        throw MyException();
    }
    catch (ExceptionBase const& e) {
        std::cout<<"catch 2"<<std::endl;
    }
    catch (...) {
        std::cout<<"should not catch 2"<<std::endl;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:
catch 1
catch 2