小谈C++异常处理.doc
文本预览下载声明
小谈C++异常处理
最近打算学习STL,所以先将之前的C++复习一遍打好基础 :-D 期末的日子也越来越近了,不能在像之前那样子有时间了,所以只能写一些更简单的东西啦. :-D
C++提供了一种完善的异常处理机制,可以使用try和catch对代码进行保护,截获运行时的错误,还可以使用throw抛出一个异常对象.
try{}块中代码运行时,如果出现异常,将按照catch{}块的顺序找到对应的异常对象进行处理
下面的程序展示了简单的try/catch异常处理,第一个try块throw出了一个int类型的异常,第二个try块throw出了一个double类型的异常.后面catch截获了对应的异常.
#include stdio.h
int main(void){
try{
printf(try:1\n);
throw 1;
}
catch(int i){
printf(catch try:1 int:%d\n, i);
}
catch(double d){
printf(catch try:1double %f\n, d);
}
try{
printf(try:2\n);
throw 1.2;
}
catch(int i){
printf(catch try:2 int:%d\n, i);
}
catch(double d){
printf(catch try:2 double:%f\n, d);
}
return 0;
}
运行结果:
try:1
catch try:1 int:1
try:2
catch try:2 double:1.200000
上面的程序只是针对每个异常类型进行处理,你也可以使用catch(…)来处理如何类型的异常.
下面的程序展示使用try/catch(…)来处理被0除的异常.
#include stdio.h
int main(void){
try{
printf(try:1\n);
int a=0;
int b=1/a;
}
catch(...){
printf(catch try:1\n);
}
return 0;
}
运行结果:
try:1
catch try:1
对于会抛出异常的函数我们也可以使用try来对其进行保护.
下面的程序就展示了这点,(其实和上面说的是一样的,这里关键是要引出下文)
#include stdio.h
void func(){
throw 1;
}
int main(void){
try{
printf(try:1\n);
func();
}
catch(int i){
printf(catch try:1 int:%d\n, i);
}
return 0;
}
我们用catch到函数抛出的异常,还可以限定一个函数能够抛出的异常类型
在函数声明后面加上函数可能抛出的异常类型的列表.
如上面的func函数,可以改成下面的形式
void func() throw(int)
{
throw 1;
}
如果给出的可能抛出的异常类型类表为空的话,表示不会抛出任何类型的异常
下面的程序就设置了函数的抛出异常类型类表为空,然后抛出了异常,于是程序被提前终止.
void func() throw()
{
throw 1;
}
int main(void){
func();
return 0;
}
运行结果:
我们也可以在截获到异常的时候继续抛出异常
#include stdio.h
void func(){
try{
throw 1;
}
catch(int){
printf(catch func\n);
throw; //继续抛出异常,然后函数返回
}
printf(这条语句不会被执行\n);
}
int main(void){
try{
func();
}
catch(int){
printf(catch main\n);
}
return 0;
}
运行结果:
catch func
catch main
到此为止,上面只是对于C++异常处理简单的介绍一下,不够对于我目前的开发来说知道这些就够用了.
今晚是平安夜,祝大家快乐啊!
显示全部