分享

更多

   

C ++ 函数后面加throw()的作用

2010-12-15  冉亮

void foo() throw (int);      // 只能抛出int型异常
void bar() throw ();         // 不抛出任何异常
void baz();                  // 可以抛出任意类型的异常或者不抛出异常

如果一个函数的声明中带有throw限定符,则在函数体中也必须同样出现:

void foo() throw (int)
{
    ...
}

这里有一个问题,非常隐蔽,就是即使你象上面一样编写了foo()函数,指定它只能抛出int异常,而实际上它还是可能抛出其他类型的异常而不被编译器发现:

void foo() throw (int)
{
    throw float;     // 错误!异常类型错误!会被编译器指出
    ...
    baz();           // 正确!baz()可能抛出非int异常而编译器又不能发现!
}

void baz()
{
    throw float;
}

这种情况的直接后果就是如果baz()抛出了异常,而调用foo()的代码又严格遵守foo()的声明来编写,那么程序将abort()。这曾经让我很恼火,认为这种机制形同虚设,但是还是有些解决的办法,请参照“使用技巧”中相关的问题。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。如发现有害或侵权内容,请点击这里 或 拨打24小时举报电话:4000070609 与我们联系。

    来自: 冉亮 > 《VC》

    猜你喜欢

    0条评论

    发表

    类似文章
    喜欢该文的人也喜欢 更多