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

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

这是 C++ 标准库中所有异常类的根类。它定义了一个虚函数 what(),用于返回描述异常的字符串信息:
立即学习“C++免费学习笔记(深入)”;
virtual const char* what() const noexcept;
虽然我们可以直接抛出和捕获 std::exception 对象,但通常更推荐使用其派生类,因为它们提供了更具体的错误信息。

这些异常表示程序在运行前就可能发现的错误,通常是由于调用者传入了不合法的参数或违反了某种前提条件。
std::logic_error
这是逻辑错误类的基类,你可以从中派生自定义逻辑错误。
std::invalid_argument
当函数接收到一个无效的参数时抛出。例如,将字符串转换为数字时输入了非数字字符。
std::domain_error
表示函数的参数不在允许的定义域内。例如数学函数中负数开平方。
std::length_error
当试图创建一个超出最大允许长度的对象时抛出,比如 std::string 的 append 方法。
std::out_of_range
访问越界时抛出,例如使用 vector::at() 或 map::at() 访问不存在的元素。
这些异常表示在运行过程中发生的不可预测的问题,通常无法在编译阶段检测到。
std::runtime_error
运行时错误的基类。
std::range_error
表示计算结果超出了可用范围,例如浮点数精度溢出。
std::overflow_error / std::underflow_error
分别表示上溢和下溢错误,常用于数值计算中。
std::regex_error
使用正则表达式时发生错误,比如语法错误。
std::system_error
与系统底层操作相关的问题,如文件打开失败、网络连接中断等。它包含一个 std::error_code 来提供更多细节。
除了上述两类之外,还有一些特殊的异常用于特定场景:
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及其派生类介绍的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号