捕获异常
try {
} catch (ExceptionName e1) {
} catch (ExceptionName e1) {
} ...抛出异常
double division(int a, int b) {
if( b == 0 ) {
throw "Division by zero condition!";
}
return a / b;
}graph LR std_exception[std::exception] bad_alloc[std::bad_alloc] domain_error[std::domain_error] bad_cast[std::bad_cast] invalid_argument[std::invalid_argument] bad_typeid[std::bad_typeid] length_error[std::length_error] bad_exception[std::bad_exception] out_of_range[std::out_of_range] logic_failure[std::logic_error] overflow_error[std::overflow_error] runtime_error[std::runtime_error] range_error[std::range_error] underflow_error[std::underflow_error] std_exception --> bad_alloc std_exception --> bad_cast std_exception --> bad_typeid std_exception --> bad_exception std_exception --> logic_failure std_exception --> runtime_error logic_failure --> domain_error logic_failure --> invalid_argument logic_failure --> length_error logic_failure --> out_of_range logic_failure --> overflow_error logic_failure --> range_error logic_failure --> underflow_error
| 异常 | 描述 |
|---|---|
| std::exception | 该异常是所有标准 C++ 异常的父类。 |
| std::bad_alloc | 该异常可以通过 new 抛出。 |
| std::bad_cast | 该异常可以通过 dynamic_cast 抛出。 |
| std::bad_exception | 这在处理 C++ 程序中无法预期的异常时非常有用。 |
| std::bad_typeid | 该异常可以通过 typeid 抛出。 |
| std::logic_error | 理论上可以通过读取代码来检测到的异常。 |
| std::domain_error | 当使用了一个无效的数学域时,会抛出该异常。 |
| std::invalid_argument | 当使用了无效的参数时,会抛出该异常。 |
| std::length_error | 当创建了太长的 std::string 时,会抛出该异常。 |
| std::out_of_range | 该异常可以通过方法抛出,例如 std::vector 和 std::bitset<>::operator[]()。 |
| std::runtime_error | 理论上不可以通过读取代码来检测到的异常。 |
| std::overflow_error | 当发生数学上溢时,会抛出该异常。 |
| std::range_error | 当尝试存储超出范围的值时,会抛出该异常。 |
| std::underflow_error | 当发生数学下溢时,会抛出该异常。 |