C++ ---> 异常(exception)

异常是一种错误处理机制

异常处理机制是“出现了什么错误,该如何处理”

一、编译错误(语法异常)

二、运行时错误(异常)

1.抛出异常

        使用关键字   throw  来抛出异常,表示程序运行时出现错误

  语法:    throw      表达式;

说明:当程序执行了throw语句后,程序流不再往下执行,从当前函数查找 异常处理语句。
            如果异常没有被处理,则往上抛出(抛出给当前函数的调用者),直到被处理为止。
            如果异常被操作系统捕获,则终止当前进程。
 

2.处理异常

        使用关键字   try...catch ...语句来捕获和处理

        try
        {
            //可能抛出(产生)异常的代码块
        }
        catch(异常类型1 形参)
        {
            处理异常
        }
        catch(异常类型n 形参)
        {
            处理异常
        }
        catch(...)... 代表任意类型的异常

        {
            处理异常
        }

说明:
            如果try中的语句抛出了异常,则程序流从try跳转到catch,进行异常类型匹配
            如果匹配成功,则进入异常处理
            如果匹配失败,则按顺序往下匹配
            如果所有的catch都匹配失败,则继续往上抛出,直到被处理为止。(编译器自动调用系统的terminate接口直接终止程序。)

    3、标准库的异常类型


        C++标准库中提供了一组异常类型,表示各种各样常见的异常情况,定义于头文件 <stdexcept>
        常见异常如:
        std::logic_error
        std::runtime_error        //只有在运行时才能检测出的问题
        std::out_of_range        //范围越界
        std::bad_alloc              //内存分配失败

所有异常类型只定义了一个名为what的成员函数,该函数没有任何参数,
        返回一个C风格的字符串 const char* 用于提供异常信息。

注意:    
        构造函数中可以抛出异常
        普通的成员函数也可以抛出异常
        
        析构函数 不能 抛出异常!析构函数默认就是noexcept的
        
        如果一个函数绝对不抛出异常,可以在函数参数列表后加 noexcept 来进行说明。
        noexcept是一种承诺,承诺该函数不抛出异常。
        如果一个函数用noexcept说明了,然后又在函数内部抛出了异常,编译时会有警告,执行时,
        如果调用了该函数,系统直接终止该进程。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值