c++ 异常处理
译自 c++ complete refrence 3rd Chapter 38
标准c++库定义了两个与异常相关的库,<exception>和<stdexcept>。异常通常用来报告错误。
<exception>
<exception>定义了与异常处理相关的类,声明和函数。
class exception {
public:
exception() throw();
exception(const char *const&);
exception(const char *const&, int);
exception(const bad_exception &ob) throw();
virtual ~exception() throw();
exception &operator=(const exception &ob) throw();
virtual const char *what(() const throw();
};
class bad_exception: public exception {
public:
bad_exception() throw();
bad_exception(const bad_exception &ob) throw();
virtual ~bad_exception() throw();
bad_exception &operator=(const bad_exception &ob) throw();
virtual const char *what(() const throw();
};
exception类是c++库中所有异常的父类。unexpected()函数抛出的就是bad_exception类型。每个异常类都重写了what()用于返回一段描述异常的字符串。
一些重要的类都继承于exception类。第一个是bad_alloc,当new操作失败时被抛出。另一个是bad_typeid,当错误地使用typeid运算时抛出。
<exception>定义下面的声明
类型 | 定义 |
terminate_handler | typedef void (*terminate_handler)( ); |
unexpected_handler | typedef void (*unexpected_handler)( ); |
<exception>定义下面的函数
函数 | 描述 |
terminater_handler set_terminate(terminate_handler fn) throw (); | 指定程序结束时调用的函数,返回的是老的函数指针。 |
unexpected_handler set_unexpected(unexpected_handler fn) throw( ); | 同上。 |
void terminate(); | 当有异常末处理时调用,默认abort()调用此函数。 |
void unexpected(); | 同上 |
<stdexcept>
<stdexcept>定义了一些标准的异常类。分为两大类:逻辑错误和运行时错误。其中运行时错误是程序员不能控制的。
逻辑错误都继承自logic_error
异常 | 描述 |
domain_error | 域错误 |
invalid_argument | 非法参数 |
length_error | 通常是创建对象是给出的尺寸太大 |
out_of_range | 访问超界 |
运行时错误都继承自runtime_error
异常 | 描述 |
overflow_error | 上溢 |
range_error | 超出表示范围 |
underflow_error | 下溢 |