C++_异常处理

C++的异常处理机制为“响应运行时刻的程序异常”提供了一个标准的语言级设施。它支持统一的语法和风格,也允许程序员进行微调。

异常处理按需要在程序中显式的测试程序异常状态,从而可以将测试异常状态的代码抽取出来,放入指定的、显式标记的代码块中(try, catch)。

 

异常处理机制的主要构成

==============================================

1.  程序中异常出现的点

    当异常被抛出时,正常的程序就被挂起,直到异常被处理完毕。

    C++中,异常的抛出由throw表达式来执行。

    例如在下面的程序段中一个string 类型的异常被抛出来以便响应打开文件失败异常

if ( ! infile ) 
{
    string errMsg( "unable to open file: " );
    errMsg += fileName;
    throw errMsg;
}

 

 

2.  程序中异常被处理的点

    一般来说,程序异常的抛出和处理位于独立的函数或成员函数调用中。 一旦异常被处理完毕就恢复正常的程序执行。但不是在发生异常的地方恢复执行过程,而是在处理异常的地方继续执行过程。

    C++中异常的处理由catch子句来执行。catch子句是与try块相关联的。 一个try块可能会对应多个catch子句,系统会根据被抛出的异常与catch子句中异常类型的匹配情况来选择catch子句。

int* stats( const int *ia, int size )
{
    int *pstats = new int[ 4 ];
    try 
    {
        pstats[ 0 ] = sum_it( ia, size );
        pstats[ 1 ] = min_val( ia, size );
        pstats[ 2 ] = max_val( ia, size );
    }
    catch( string exceptionMsg )
    {
        /* 处理异常的代码*/
    }
    catch( const statsException &statsExcp )
    {
        /* 处理异常的代码*/
    }
    pstats[ 3 ] = pstats[ 0 ]/size;
    do_something( pstats );
    return pstats;
}

 

    一种特殊的、能处理全部异常的catch子句如下:

catch( ... )
{
    // 处理所有异常,虽然它无法
    // 访问异常对象
}

 

    如果try块内抛出的异常不能被相关联的catch子句处理,那么当前函数将被终止。异常机制会继续在上层的函数中查找catch处理代码。如果一直找到main()函数还是没有找到合适的处理代码,那么程序将调用标准库函数terminate()来结束程序。

转载于:https://www.cnblogs.com/JaneTang/archive/2010/02/09/1666738.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值