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)
C++异常处理将匹配异常子类.但是,它执行从第一个catch()到最后一个的线性搜索,并且只匹配第一个.因此,如果您打算同时捕获Base和Derived,则需要首先捕获(MySpecialException&).
用代码很容易解释: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
| 归档时间: |
|
| 查看次数: |
2939 次 |
| 最近记录: |