搜索
首页 教育/科学 职业教育 职业培训

C++中catch(…)应该如何使用?

C++中catch(…)应该如何使用?

全部回答

2017-07-28

83 0
    上一篇文章中详细讲了讲C++异常处理模型的trycatch使用语法,其中catch关键字是用来定义catch block的,它后面带一个参数,用来与异常对象的数据类型进行匹配。
  注意catch关键字只能定义一个参数,因此每个catch block只能是一种数据类型的异常对象的错误处理模块。  如果要想使一个catch block能抓获多种数据类型的异常对象的话,怎么办?C++标准中定义了一种特殊的catch用法,那就是” catch(…)”。
   感性认识  1、catch(…)到底是一个什么样的东东,先来个感性认识吧!看例子先:int main(){try{cout << "在 try block 中, 准备抛出一个异常。
    " << endl;//这里抛出一个异常(其中异常对象的数据类型是int,值为1)throw 1;}//catch( int& value )//注意这里catch语句catch( …){cout << "在 catch(…) block 中, 抛出的int类型的异常对象被处理" << endl;}}  2、哈哈!int类型的异常被catch(…)抓获了,再来另一个例子:int main(){try{cout << "在 try block 中, 准备抛出一个异常。
    " << endl;//这里抛出一个异常(其中异常对象的数据类型是double,值为0。5)throw 0。5;}//catch( double& value )//注意这里catch语句catch( …){cout << "在 catch(…) block 中, double类型的异常对象也被处理" << endl;}}  3、同样,double类型的异常对象也被catch(…)块抓获了。
    是的,catch(。。)能匹配成功所有的数据类型的异常对象,包括C++语言提供所有的原生数据类型的异常对象,如int、double,还有char*、int*这样的指针类型,另外还有数组类型的异常对象。
  同时也包括所有自定义的抽象数据类型。例程如下:int main(){try{cout << "在 try block 中, 准备抛出一个异常。  " << endl;//这里抛出一个异常(其中异常对象的数据类型是char*)char* p=0;throw p;}//catch( char* value )//注意这里catch语句catch( …){cout << "在 catch(…) block 中, char*类型的异常对象也被处理" << endl;}}int main(){try{cout << "在 try block 中, 准备抛出一个异常。
    " << endl;//这里抛出一个异常(其中异常对象的数据类型是int[])int a[4];throw a;}//catch( int value[] )//注意这里catch语句catch( …){cout << "在 catch(…) block 中, int[]类型的异常对象也被处理" << endl;}}  4、对于抽象数据类型的异常对象。
    catch(…)同样有效,例程如下:class MyException{public:protected:int code;};int main(){try{cout << "在 try block 中, 准备抛出一个异常。
  " << endl;//这里抛出一个异常(其中异常对象的数据类型是MyException)throw MyException();}//catch(MyException& value )//注意这里catch语句catch( …){cout << "在catch(…) block中, MyException类型的异常对象被处理" << endl;}}对catch(…)有点迷糊?1、究竟对catch(…)有什么迷糊呢?还是看例子先吧!void main(){int* p = 0;try{// 注意:下面这条语句虽然不是throw语句,但它在执行时会导致系统// 出现一个存储保护错误的异常(access violation exception)*p = 13; // causes an access violation exception;}catch(。
    。。
  ){//catch(…)能抓获住上面的access violation exception异常吗?cout << "在catch(…) block中" << endl;}} 以上是我对于这个问题的解答,希望能够帮到大家。

类似问题换一批

热点推荐

热度TOP

相关推荐
加载中...

热点搜索 换一换

教育/科学
职业培训
院校信息
升学入学
理工学科
出国/留学
职业教育
人文学科
外语学习
学习帮助
K12
职业教育
职业培训
会计资格考试
远程教育
自考
司法考试
公务员考试
职业培训
职业培训
举报
举报原因(必选):
取消确定举报