在C++中,在异常声明说明符中,如果我声明一个基类然后抛出一个派生类,是不是意外的异常?异常声明中的派生对象类型是否意外?
1
A
回答
2
在C++中,在异常声明说明符中,如果我声明一个基类然后抛出一个派生类,那是一个意外的异常吗?
不可以。
参考: C++ 03 15.4异常规范
帕拉6:
例外规格可以包括相同类型的多于一次,并且可以包括作为相关的类通过继承,即使这样做是多余的。异常规范也可以包含类std :: bad_exception(18.6.2.1)。
有一个在
第8段相关的例子:
[Example:
class X { };
class Y { };
class Z: public X { };
class W { };
void f() throw (X, Y)
{
int n = 0;
if (n) throw X(); // OK
if (n) throw Z(); // also OK <------- Example of the exact scenario you posted
throw W(); // will call unexpected()
}
—end example]
注意异常规范被视为失败和大多数编译器不正确地实现他们的实验。所以请避免(而不要)使用它们。
0
我知道这是可怕的非答案,但请不要使用异常规格:
http://www.gotw.ca/publications/mill22.htm
引述相关部分:
道德#1:不要写一个异常规范。
道德#2:除了可能是一个空的,但如果我是你,我甚至会避免。
在C++ 11中对#2的警告是“noexcept”。
相关问题
- 1. UCanAccess UPDATE声明的异常:“意外的页面类型1”
- 2. bad_cast异常参考派生类对象
- 3. 使用声明(派生类)
- 4. Protobuf-net StackOverflow异常与派生类型
- 5. 是否可以在Fortran中将矩阵声明为派生类型?
- 6. 指向派生类对象的基类指针可以访问在派生类中声明的新成员吗?
- 7. 如何将迭代器声明为派生类对象?
- 8. 意外的类型 - 序列化异常
- 9. 在派生类中声明枚举
- 10. 如何声明从特定类派生的类型参数?
- 11. 声明泛型类型对象go
- 12. 声明类对象数据类型
- 13. 是派生对象的模板基类型模板的子类
- 14. WebApi无法序列化从派生类声明的属性异常
- 15. 声明对象类型的接口
- 16. 有关声明的对象类型
- 17. 我是否仅在函数头或声明中指定了异常类型? (C++)
- 18. 如何从基类型中声明的方法返回派生类型
- 19. JUnit异常“对象不是声明方法的实例”
- 20. 火花的java:java.lang.IllegalArgumentException异常:对象不是声明
- 21. 类成员是派生对象,其类型尚未知晓
- 22. 异常java.lang.IllegalArgumentException:对象不是在sun上声明类的实例.reflect.NativeMethodAccessorImpl.invoke0
- 23. 在类声明中抛出异常
- 24. 如何检查派生类中对象的类型名称?
- 25. 类对象的声明confucion
- 26. 对象模型设计;基类对派生类的认识
- 27. 在类声明中声明一个类对象的指针
- 28. 找到派生对象的类型。用对象类型混合定义字典
- 29. 如何转发声明从前向声明的模板基类派生的类?
- 30. C++抽象类型声明