【C++】:标准异常库

217 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第33天,点击查看活动详情

1️⃣前言

今天的笔记内容:

  • C++的标准异常库

2️⃣概述

C++ 提供了一系列以父子类层次结构组织起来的,标准的异常,且定义在<exception>中,我们可以在程序中使用这些标准异常

C++标准异常库继承层次图如下所示:

标准库.png

具体说明如下:

异常描述
exception所有标准C++异常类的父类
bad_alloc 该异常可以通过new抛出(请求分配内存失败时)
bad_exception这个异常比较特殊,其在处理C++程序中无法预期的异常时非常有用
bad_typeid 该异常可以通过typeid抛出(使用typeid操作符,操作一个NULL指针,而该指针是带有虚函数的类,这时会抛出bad_typeid异常)
bad_cast 该异常可以通过dynamic_cast抛出(即使用dynamic_cast转换引用失败的时候)
logic_error逻辑错误,是理论上可以通过读取代码来检测到的异常(即运行前检测的错误)
ios_base::failureIO操作出现错误
runtime_error运行时错误,仅在运行时才可以检测的错误
length_error 当创建了太长的std::string时,会抛出该异常。比如vectorresize操作
domain_error 主要用在数学函数中,当使用了一个无效的数学域时(参数的值域错误),则会抛出该异常
out_of_range 超出有效范围
invalid_argument当使用了无效的参数时,会抛出该异常(在标准库中,当利用string对象构造bitset时,而string中的字符不是'1''0'的时候,抛出该异常)
range_error当尝试存储超出范围的值时(计算结果超出有意义的值域范围时),会抛出该异常
overflow_error 当发生数学上溢(算术计算),会抛出该异常
underflow_error当发生数学下溢(算术计算),会抛出该异常

在上面这个表格中,每个异常类都有构造函数,拷贝构造函数和赋值操作符的重载。logic_error类及其子类、runtime_error类及其子类,他们的构造函数都是接受一个string类型的形式参数,用于异常信息的描述,而所有异常类都有一个what()方法,返回const char*类型的值,用于描述异常信息。

3️⃣写在最后

好了,今天的笔记就到这里。