当程序的某部分检测到一个它无法处理的问题时,需要用到异常处理。此时,检测出
问题的部分应该发出某种信号以表明程序遇到了故障,无法继续下去了,而且信号的发出
方无须知道故障将在何处得到解决。一旦发出异常信号,检测出问题的部分也就完成了任
务。
try语句块中检测异常,如果出现异常,通过throw抛出异常,catch语句块中捕捉异常进行对应操作。
代码示例:
int a = 2;
int b = 3;
try {
if (a != b)
throw invalid_argument("Denominator cannot be zero.");
}
catch(const invalid_argument& a){
cout << a.what();
}
语法上
throw后面应该紧跟异常类型:
throw exception_object;注意后面应该传入字符串以构造异常对象。
exception_object
:可以是任何类型的对象,只要它至少可以被拷贝或移动。所以我们可以自定
义异常类型。
std::exception(异常基类)
std::bad_alloc(用于内存分配失败)
std::bad_cast(用于类型转换失败)
std::bad_typeid(用于 typeid 操作失败)
std::bad_exception(用于标准异常处理失败)
std::logic_error(用于逻辑错误)
std::invalid_argument(用于无效参数)
std::domain_error(用于域错误)
std::invalid_argument(用于无效参数)
std::length_error(用于长度错误)
std::out_of_range(用于超出范围)
std::runtime_error(用于运行时错误)
std::range_error(用于范围错误)
std::overflow_error(用于溢出错误)
std::underflow_error(用于下溢错误)
try catch的语法上
catch内部通常以引用的方式捕捉异常,通过异常对象访问异常信息,如调用what函数。
catch内部可以重新抛出异常,使用throw。