Szy*_*ski 1 c++ exception try-catch
我正在分析属于我的讲座的部分代码。我已经设法编译了它,但我不明白:为什么我的程序输出“ Wyjatek”和0而不是“ WyjatekNieoznaczony”?
我非常确定应该抛出WyjatekNieoznaczony(),因为a = 0和b = 0也是如此。现在我有点困惑。请问你能帮帮我吗?
class Wyjatek {};
class WyjatekBledny : public Wyjatek {};
class WyjatekNieoznaczony : public Wyjatek {};
double f(double a, double b) {
if (b == 0) {
if (a == 0)
throw WyjatekNieoznaczony();
else
throw WyjatekBledny();
}
return a / b;
}
double g(double a, double b) throw (int) {
try {
return f(a, b);
}
catch (WyjatekBledny) {
cout << "Wyjatek bledny" << endl;
throw 1;
}
catch (Wyjatek) {
cout << "Wyjatek" << endl;
}
catch (WyjatekNieoznaczony) {
cout << "Wyjatek nieoznaczony" << endl;
throw;
}
return 0;
}
int main()
{
double a = 0, b = 0;
try {
cout << g(a, b) << endl;
}
catch (...)
{
cout << "Inny wyjatek" << endl;
}
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
是的,确实WyjatekNieoznaczony引发了一个,但是在捕获站点,catch (Wyjatek) {是一个匹配项(由于继承),因此被捕获了。
捕获站点更像是一个if else行为块-每种catch可能性都按照它们的书写顺序进行考虑-而不是一个switch块,您可以按照自己喜欢的顺序放置标签。
还要注意,通过const引用而不是通过值捕获异常是一个好主意,否则您可能会遭受对象切片的陷阱。
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |