morelinux@gx 人生五十年 如梦亦如幻 有生斯有死 壮士何所憾

C++ primer读书笔记(四)--- 异常

2016-07-04
c++

标准异常

C++标准 try、catch、throw是C++标准里的语法,标准只要求try catch捕获throw出来的异常,并不要求捕获系统异常(被0除,段错误,CPU异常等)。从C++层面来说,不要期望try,catch能捕获系统异常。 GCC所实现的C++异常处理框架中,它的catch(…)语法,并不能捕获系统异常。因此,这给C++中异常处理的良好运行打了大大的折扣。

  • C++标准库定义了一组类,用于报告标准库函数遇到的问题。这些异常类也可以用在用户编写的程序中使用,它们分别定义在4个头文件中:

    • exception 头文件定义了最通用的异常类exception。它只报告异常的发生,不提供任何额外信息。
    • stdexcept 头文件定义了几种常用的异常类

      异常类 描述
      exception 最常见的问题
      runtime_error 只有运行时才能检测出的错误
      range_error 运行时错误:生成的结果超出了有意义的值域范围
      overflow_error 运行时错误:计算上溢
      underflow_error 运行时错误:计算下溢
      logic_error 程序逻辑错误
      domain_error 逻辑错误:参数对应的结果值不存在
      invalid_argument 逻辑错误:无效参数
      length_error 逻辑错误:试图创建一个超出该类型最大长度的对象
      out_of_range 逻辑错误:使用一个超出有效范围的值
    • new头文件定义了bad_alloc异常类型
    • type_info头文件定义了bad_cast异常类型
  • 标准库异常类只定义了几种运算,包括创建或拷贝异常类型的对象,以及为异常类型的对象赋值。

    • 只能以默认初始化的方式初始化exceptionbad_allocbad_cast对象,不允许为这些对象提供初始值。
    • 其他异常类型,应该使用string对象或C风格字符串初始化,不允许使用默认初始化方式。当创建此类对象时,必须提供初始值,该初始值含有错误相关的信息。

    异常类型只定义了一个名为what的成员函数,该函数没有参数,返回值是一个指向C风格字符串的const char*。该字符串的目的是提供关于异常的一些文本信息。 what函数返回的具体内容与异常对象的类型有关。如果异常类型有一个字符串初始值,则what返回该字符串。对于其他无初始值的异常类型来说,what返回的内容由编译器决定。


Comments