C/C++编程:错误(error)处理和异常(exception)处理

r囧r小猫 2023-01-03 14:04 216阅读 0赞

C++标准程序库由不同的成分构成。来源不同,设计与实现风格迥异。而错误处理和异常处理正是这种差异的一个典型实现。

  • 标准程序库中有一部分,例如std classes,支持具体的错误处理,他们检测所有可能发生的错误,并于错误发生时抛出异常
  • STLvalarrays等,效率重于安全,因此几乎不检验逻辑错误,并且只在执行期(runtime)发生错误才抛出异常

标准异常类别(standard exception classes)

语言本身或者标准程序库所抛出的所有异常,都派生自基类exception。这些标准异常两步可以分为三组:

  • 语言本身支持的异常
  • C++标准程序库发出的异常
  • 程序作用域之外的异常

在这里插入图片描述
所用头文件

  1. #include <exception>
  2. #include <new>
  3. #include <typeinfo>
  4. #include <ios>
  5. #include <stdexcept>

语言本身支持的异常

此类异常用以支撑某些语言特性。

如果以下操作失败,就会抛出这一类的异常:

  • new操作失败,bad_alloc异常
  • 执行期间,当reference上的dynamic_cast失败时,抛出bad_cast异常
  • 执行期RTTI过程中,如果typeid的参数为0或者空指针,typeid操作符会bad_typeid异常
  • 如果发生非预期的异常,bad_exception异常会接手处理。

C++标准程序库发出的异常

C++标准程序库异常总是派生自logic_error.

C++标准程序库提供以下逻辑错误类别:

  • invalid_argument表示无效参数
  • length_error指出某些行为“可能超过了最大极限”
  • out_of_range指出参数值“不在预期范围内”
  • domain_error指出专业领域范围内的错误。

标准程序库的IO部分提供一个名为ios_base::failure的特殊异常。当数据流由于错误或由于到达文件尾端而发生状态改变时,就可能抛出这个异常

程序作用域之外的异常

派生自runtime_error

用来指出“不在程序范围内,而且不容易回避”的事件

C++标准程序库针对执行期错误提供了如下三个classes:

  • range_error指出内部计算时发生区间错误
  • overflow_error:算术运算时发生上溢位
  • underflow_error:算术运算时发生下溢位

建议: 最好只使用标准异常,因为移植性问题

使用

抛出异常

  1. throw std::out_of_range("std::out_of_range");

从标准异常类别(exception classes)中派生新异常[待补充]

待研究

发表评论

表情:
评论列表 (有 0 条评论,216人围观)

还没有评论,来说两句吧...

相关阅读