And*_*ndy 5 c# c++ java exception-handling catch-block
我目前正在使用Visual Studio Express C++ 2008,并且对catch块排序有一些疑问.不幸的是,我无法在互联网上找到答案,所以我向专家提出这些问题.
我注意到除非catch(...)放在catch块的末尾,否则编译将失败,错误C2311.例如,以下内容将编译:
catch (MyException)
{
}
catch (...)
{
}
Run Code Online (Sandbox Code Playgroud)
而以下不会:
catch (...)
{
}
catch (MyException)
{
}
Run Code Online (Sandbox Code Playgroud)
一个.我是否可以问这是否是在C++语言标准中定义的,或者这只是Microsoft编译器是严格的?
湾 C#和Java也有相同的规则吗?
C.另外,我还尝试创建基类和派生类,并在派生类的catch语句之前放置基类的catch语句.这编译没有问题.请不要有语言标准来防范这种做法吗?
根据标准,订单很重要.基本上,将捕获匹配异常的第一个catch.
a)因为catch(...)将使任何后续捕获无关紧要,标准只允许它成为最后一个捕获.
b)C#和Java有类似的规则.
c)在派生类使得派生的代码不相关之前捕获(通过引用或指针)基数.但是,该标准确实允许这样做
| 归档时间: |
|
| 查看次数: |
569 次 |
| 最近记录: |