1、C++ exception类:C++标准异常的基类
C++语言本身或者标准库抛出的异常都是 exception 的子类,称为标准异常(Standard Exception)。
你可以通过下面的语句来捕获所有的标准异常:
try
{
//可能抛出异常的语句
}catch(exception &e)
{
//处理异常的语句
}
之所以使用引用,是为了提高效率。如果不使用引用,就要经历一次对象拷贝(要调用拷贝构造函数)的过程。
exception 类位于 < exception > 头文件中,它被声明为:
class exception
{
public:
exception () throw();//构造函数
exception (const exception&) throw();//拷贝构造函数
exception& operator= (const exception&) throw();//运算符重载
virtual ~exception() throw();//虚析构函数
virtual const char* what() const throw();//虚函数
}
这里需要说明的是 what() 函数。what() 函数返回一个能识别异常的字符串,正如它的名字“what”一样,可以粗略地告诉你这是什么异常。不过C++标准并没有规定这个字符串的格式,各个编译器的实现也不同,所以 what() 的返回值仅供参考。
下图展示了 exception 类的继承层次:
图:exception 类的继承层次以及它们所对应的头文件
先来看一下 exception 类的直接派生类:
logic_error 的派生类:
runtime_error 的派生类: