首页 编程 C/C++ 查看内容

c++教程32:C++ 标准的异常

2021-10-3 16:00 2087 0

摘要: C++ 标准的异常C++ 提供了一系列标准的异常,定义在exception中,我们可以在程序中使用这些标准的异常。它们是以父类层次结构组织起来的,如下所示:https://www.runoob.com/wp-content/uploads/2015/05/exceptions_ ...
关键词: 异常 std C++ exception 可以通过 error 标准 使用 重载 定义

C++ 标准的异常
C++ 提供了一系列标准的异常,定义在 <exception> 中,我们可以在程序中使用这些标准的异常。它们是以父类层次结构组织起来的,如下所示:
下表是对上面层次结构中出现的每个异常的说明:
异常
描述
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当发生数学下溢时,会抛出该异常。
定义新的异常
您可以通过继承和重载 exception 类来定义新的异常。下面的实例演示了如何使用 std::exception 类来实现自己的异常:
实例#include <iostream>#include <exception>using namespace stdstruct MyException : public exception{  const char * what () const throw ()  {    return "C++ Exception";  }}int main(){  try  {    throw MyException();  }  catch(MyExceptione)  {    std::cout << "MyException caught" << std::endl;    std::cout << e.what() << std::endl;  }  catch(std::exceptione)  {    //其他的错误  }}


这将产生以下结果:
MyException caughtC++ Exception
在这里,what() 是异常类提供的一个公共方法,它已被所有子异常类重载。这将返回异常产生的原因。
+

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部