Throw表达式和try块的定义如下:
1. throw 表达式,错误检测部分使用这种表达式来说明遇到了不可处理的错误。可以说,throw 引发了异常条件。
2. try 块,错误处理部分使用它来处理异常。try 语句块以 try 关键字开始,并以一个或多个 catch 子句结束。在 try 块中执行的代码所抛出 (throw)的异常,通常会被其中一个 catch 子句处理。由于它们“处理” 异常,catch 子句也称为处理代码。
3. 由标准库定义的一组异常类,用来在 throw 和相应的 catch 之间传递有关的错误信息。
举个例子来说明是最好的方法:
bitset 类提供 to_ulong 操作,如果 bitset 提供的位数大于 unsigned long 的长度时,抛出一个overflow_error 异常。编写产生这种异常的程序。
代码如下:
1 #include<iostream> 2 #include<bitset> 3 4 using namespace std; 5 6 int main() { 7 bitset<1000>bs; 8 9 for(int i = 0; i != bs.size(); i++) { 10 bs[i] = 1; 11 } 12 13 try { 14 bs.to_ulong(); 15 } 16 catch (runtime_error err) { 17 cout << err.what() 18 << " Wrong!"<< endl; 19 } 20 21 }
C++标准库定义了一组类,用于报告标准数据库中的函数遇到的问题。
在 <stdexcept> 头文件中定义的标准异常类
exception 最常见的问题。
runtime_error 运行时错误:仅在运行时才能检测到问题
range_error 运行时错误:生成的结果超出了有意义的值域范围
overflow_error 运行时错误:计算上溢
underflow_error 运行时错误:计算下溢
logic_error 逻辑错误:可在运行前检测到问题
domain_error 逻辑错误:参数的结果值不存在
invalid_argument 逻辑错误:不合适的参数
length_error 逻辑错误:试图生成一个超出该类型最大长度的对象
out_of_range 逻辑错误:使用一个超出有效范围的值
每一个标准库异常类都定义了名为 what 的成员函数。这个函数不需要参数,返回 C 风格字符串。
另外,new 头文件定义了 bad_alloc 异常类型,提供因无法分配内在而由 new抛出的异常。type_info 头文件定义了 bad_cast 异常类型。