gpt4 book ai didi

c# - 关于 catch block 中 catch 语句顺序的问题 - 特定于编译器或语言标准?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:16 25 4
gpt4 key购买 nike

我目前正在使用 Visual Studio Express C++ 2008,并且对 catch block 排序有一些疑问。不幸的是,我在互联网上找不到答案,所以我向专家提出这些问题。

我注意到除非将 catch (...) 放在 catch block 的末尾,否则编译将失败并出现错误 C2311。例如,以下将编译:

catch (MyException)
{
}
catch (...)
{
}

而以下不会:

catch (...)
{
}
catch (MyException)
{
}

一个。请问这是在C++语言标准中定义的,还是微软编译器严格的问题?

C# 和 Java 也有相同的规则吗?

顺便说一句,我还尝试制作一个基类和一个派生类,并将基类的 catch 语句放在派生类的 catch 语句之前。这编译没有问题。请问有没有语言标准来防止这种做法?

最佳答案

按照标准,顺序很重要。基本上匹配异常的第一个catch 将被捕获。

a) 因为 catch(...) 将使任何后续捕获无关紧要,标准只允许它是最后一个捕获。

b) C# 和 Java 有相似的规则。

c) 在派生类之前捕获(通过引用或指针)基类将使派生类的代码变得无关紧要。但是,标准确实允许这样做

关于c# - 关于 catch block 中 catch 语句顺序的问题 - 特定于编译器或语言标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2405115/

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