C++标准库异常有哪些常用类型 std exception及其派生类介绍

c++++标准库中的异常体系基于std::exception类构建,位于头文件中。1. std::exception是所有标准异常的基类,定义了返回错误信息的虚函数what()。2. 逻辑错误类型包括:std::logic_error(逻辑错误基类)、std::invalid_argument(无效参数)、std::domain_error(定义域错误)、std::length_error(长度超出限制)、std::out_of_range(访问越界)。3. 运行时错误类型包括:std::runtime_error(运行时错误基类)、std::range_error(范围错误)、std::overflow_error/underflow_error(上溢/下溢错误)、std::regex_error(正则表达式错误)、std::system_error(系统错误)。4. 其他特殊异常包括:std::bad_alloc(内存分配失败)、std::bad_cast(dynamic_cast失败)、std::bad_typeid(typeid空指针)、std::bad_function_call(调用空function)。建议自定义异常从std::exception或其派生类继承并重写what()方法以保持一致性。

C++标准库异常有哪些常用类型 std exception及其派生类介绍

C++标准库中的异常体系是基于 std::exception 类构建的,它位于 头文件中。这个类是所有标准异常类型的基类,开发者也可以从它派生自己的异常类。在实际编程中,我们通常会使用其派生出的具体异常类型来区分不同的错误情况。

C++标准库异常有哪些常用类型 std exception及其派生类介绍

下面是一些常用的异常类型及其适用场景,帮助你在不同情况下选择合适的异常类。

C++标准库异常有哪些常用类型 std exception及其派生类介绍

1. std::exception —— 所有标准异常的基类

这是 C++ 标准库中所有异常类的根类。它定义了一个虚函数 what(),用于返回描述异常的字符串信息:

立即学习“C++免费学习笔记(深入)”;

virtual const char* what() const noexcept;

虽然我们可以直接抛出和捕获 std::exception 对象,但通常更推荐使用其派生类,因为它们提供了更具体的错误信息。

C++标准库异常有哪些常用类型 std exception及其派生类介绍

2. 逻辑错误相关的异常类型

这些异常表示程序在运行前就可能发现的错误,通常是由于调用者传入了不合法的参数或违反了某种前提条件。

std::logic_error
这是逻辑错误类的基类,你可以从中派生自定义逻辑错误。

std::invalid_argument
当函数接收到一个无效的参数时抛出。例如,将字符串转换为数字时输入了非数字字符。

std::domain_error
表示函数的参数不在允许的定义域内。例如数学函数中负数开平方。

std::length_error
当试图创建一个超出最大允许长度的对象时抛出,比如 std::stringappend 方法。

std::out_of_range
访问越界时抛出,例如使用 vector::at()map::at() 访问不存在的元素。

3. 运行时错误相关的异常类型

这些异常表示在运行过程中发生的不可预测的问题,通常无法在编译阶段检测到。

std::runtime_error
运行时错误的基类。

std::range_error
表示计算结果超出了可用范围,例如浮点数精度溢出。

std::overflow_error / std::underflow_error
分别表示上溢和下溢错误,常用于数值计算中。

std::regex_error
使用正则表达式时发生错误,比如语法错误。

std::system_error
与系统底层操作相关的问题,如文件打开失败、网络连接中断等。它包含一个 std::error_code 来提供更多细节。

4. 其他特殊情况下的异常

除了上述两类之外,还有一些特殊的异常用于特定场景:

std::bad_alloc
new 操作符分配内存失败时抛出。

std::bad_cast
dynamic_cast 转换失败时抛出(仅用于引用类型)。

std::bad_typeid
如果对空指针执行 typeid 操作,会抛出此异常。

std::bad_function_call
调用一个空的 std::function 对象时抛出。

如果你需要自定义异常类,建议从 std::exception 或其派生类继承,并重写 what() 方法。例如:

struct my_exception : public std::runtime_error {    my_exception() : std::runtime_error("Custom error occurred") {}};

这样可以保持异常体系的一致性,并方便统一处理。

基本上就这些,C++ 标准库提供的异常类型已经覆盖了大多数常见错误场景。合理使用这些异常类型,可以让代码更具可读性和健壮性。

以上就是C++标准库异常有哪些常用类型 std exception及其派生类介绍的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1467917.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月18日 17:23:38
下一篇 2025年12月18日 17:23:49

相关推荐

发表回复

登录后才能评论
关注微信