标准异常
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异常类型
- exception 头文件定义了最通用的异常类
-
标准库异常类只定义了几种运算,包括创建或拷贝异常类型的对象,以及为异常类型的对象赋值。
- 只能以默认初始化的方式初始化
exception
、bad_alloc
和bad_cast
对象,不允许为这些对象提供初始值。 - 其他异常类型,应该使用
string
对象或C风格字符串初始化,不允许使用默认初始化方式。当创建此类对象时,必须提供初始值,该初始值含有错误相关的信息。
异常类型只定义了一个名为
what
的成员函数,该函数没有参数,返回值是一个指向C风格字符串的const char*
。该字符串的目的是提供关于异常的一些文本信息。what
函数返回的具体内容与异常对象的类型有关。如果异常类型有一个字符串初始值,则what
返回该字符串。对于其他无初始值的异常类型来说,what
返回的内容由编译器决定。 - 只能以默认初始化的方式初始化