免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1618 | 回复: 1
打印 上一主题 下一主题

[C++] 如何理解异常集合作为函数声明的一部分 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-11 17:00 |只看该作者 |倒序浏览
#include <iostream>
using namespace std;
class A
{
public:
&nbsp;&nbsp;&nbsp;&nbsp;  void s_print(){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout<<"error--A"<<endl;
&nbsp;&nbsp;&nbsp;&nbsp;}
};

class B
{
public:
&nbsp;&nbsp;&nbsp;&nbsp;void s_print(){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout<<"error--B"<<endl;
&nbsp;&nbsp;&nbsp;&nbsp;}
};

class C
{
public:
&nbsp;&nbsp;&nbsp;&nbsp;void s_print(){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout<<"error--C"<<endl;
&nbsp;&nbsp;&nbsp;&nbsp;}
};

void f( )throw (A,B);
void f( )throw(A,B)
{
&nbsp;&nbsp;&nbsp;&nbsp;throw A();
&nbsp;&nbsp;&nbsp;&nbsp;throw B();
&nbsp;&nbsp;&nbsp;&nbsp;throw C();
}
int main() {
&nbsp;&nbsp;&nbsp;&nbsp;try
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f();
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;catch(A& a)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.s_print();
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;catch (B& b)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.s_print();
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;catch (C& c)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.s_print();
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;return 0;
}


问题一:void f( )throw(A,B),已经说明f()只能抛出两个异常A和B,为啥在其函数实现体中,抛出C,g++没有任何报错,连警告也没有?

问题二:void f( )throw(A,B){//代码}等价于如下代码
void f()
try{
&nbsp;&nbsp;&nbsp;&nbsp;//代码

}
catch(A) {throw;}
catch(B) {throw;}
catch(...){
&nbsp;&nbsp;&nbsp;&nbsp;std::unexpected();
}


在main中,捕捉A()后,异常被重新抛出,为何后面的B()和C(),捕捉不到?这里的重新throw怎么理解?

论坛徽章:
0
2 [报告]
发表于 2010-01-12 10:40 |只看该作者
怎么没人回答?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP