【发布时间】:2016-09-16 09:25:28
【问题描述】:
对于下面的代码,结果是“EA Exception Finished”,这意味着虽然我们抛出了派生类,但它被基类捕获。总是这样吗?如果是这样,我怎样才能使派生类捕获,从而出现“EB Exception Finished”?
我也不知道throw EB() 和catch(EA&) 是什么意思。 catch(EA&) 是否意味着 catch 块获取 EA object 的引用?
对不起,我的无知。如果您向我推荐一本书或有关异常结构的参考资料,那将很有帮助。
class EA {};
class EB: public EA {};
void F()
{
throw EB(); // throw at EB().
}
int main()
{
try
{
F();
}
catch(EA&) // caught here??
{
std::cout<<"EA Exception";
}
catch(EB&) // why not me? every time?
{
std::cout<<"EB Exception";
}
std::cout<<" Finished"<<std::endl;
return 0;
}
【问题讨论】:
-
异常总是被 first 捕获块捕获,可以捕获它,所以你的顺序是错误的。
-
非常感谢您的回答!!!
标签: c++ exception-handling try-catch throw catch-block