gpt4 book ai didi

c++ - 为什么基类catch block catch派生类对象?

转载 作者:行者123 更新时间:2023-11-30 01:48:58 25 4
gpt4 key购买 nike

为什么 Base catch 处理程序会捕获 Derived 对象,如:

#include <iostream>
using namespace std;
class Base {};
class Derived: public Base {};

int main()
{
Derived d;
try {
throw d;
}
catch(Base b)
{
cout << "Caught Base Exception";
}
catch(...)
{
cout << "Default\n";
}
return 0;
}

我得到的输出是“Caught Base Exception”。我期待“默认”。

最佳答案

因为 Derived 可以隐式转换为 Base,所以当尝试第一个 catch 处理程序时,它会成功。这就是为什么我们可以调用所有 std 异常的相同原因:

catch (std::exception const& e) {
..
}

否则,我们将不得不枚举所有这些 - 这充其量是乏味的,最坏的情况是不可能的。

关于c++ - 为什么基类catch block catch派生类对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29731033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com