我目前正在使用 Visual Studio Express C++ 2008,并且对 catch 块排序有一些疑问。不幸的是,我在互联网上找不到答案,所以我向专家提出这些问题。
我注意到除非将 catch (...) 放在 catch 块的末尾,否则编译将失败并出现错误 C2311。例如,以下将编译:
catch (MyException)
{
}
catch (...)
{
}
而以下不会:
catch (...)
{
}
catch (MyException)
{
}
一个。请问这是在 C++ 语言标准中定义的,还是只是 Microsoft 编译器严格?
湾。C# 和 Java 也有相同的规则吗?
C。顺便说一句,我也尝试过创建一个基类和一个派生类,并将基类的 catch 语句放在派生类的 catch 语句之前。这编译没有问题。请问有没有防止这种做法的语言标准?