jas*_*ine 6 c++ virtual-functions exception exception-specification
请考虑以下代码:
class A
{
public:
virtual void f() throw ( int ) { }
};
class B: public A
{
public:
void f() throw ( int, double ) { }
};
Run Code Online (Sandbox Code Playgroud)
在编译时,它表示派生类B与A相比具有更宽松的抛出说明符.这有什么重要性?如果我们尝试交换它们的异常规范,例如A :: f()抛出int和double而B :: f()只抛出int,则不会出现错误.
Chr*_*ung 13
扩展第2点:A调用者希望只有int出现,但是如果你使用a B(因为它是公开衍生的A,也意味着它可以用作A),突然double也会出现,这会破坏A合同(只会int被抛出).
| 归档时间: |
|
| 查看次数: |
5188 次 |
| 最近记录: |