C++标准库中的异常类位于<exception>头文件中,它们是预定义的异常类,用于处理程序运行时可能发生的错误。这些异常类在C++98、C++03、C++11、C++14、C++17和C++20标准中都有所更新和改进。
以下是C++标准异常类在主要版本更新中的变化:
C++98:
std::exception:所有标准异常类的基类。std::runtime_error:派生自std::exception,用于表示运行时错误。std::out_of_range:派生自std::runtime_error,用于表示访问超出范围的情况。std::bad_alloc:派生自std::runtime_error,用于表示内存分配失败。std::logic_error:派生自std::exception,用于表示逻辑错误。std::domain_error:派生自std::runtime_error,用于表示域错误。std::invalid_argument:派生自std::runtime_error,用于表示无效的参数。std::length_error:派生自std::runtime_error,用于表示长度错误。std::range_error:派生自std::runtime_error,用于表示范围错误。std::overflow_error:派生自std::runtime_error,用于表示溢出错误。std::underflow_error:派生自std::runtime_error,用于表示下溢错误。C++03:
std::exception类增加了一个名为what的虚函数,用于返回异常的描述信息。其他异常类也继承了what函数。C++11:
noexcept关键字,用于指定函数不会抛出异常。这有助于提高代码的性能和安全性。std::exception类增加了一个名为what的const成员函数,用于返回异常的描述信息。其他异常类也继承了what函数。C++14:
std::exception_ptr类型,用于表示一个异常对象的指针。这使得异常可以在不同的线程之间传递和处理。std::exception类增加了一个名为source_location的成员函数,用于返回异常发生的源代码位置。其他异常类也继承了source_location函数。C++17:
std::exception类增加了一个名为__func__的成员函数,用于返回异常发生的函数名称。其他异常类也继承了__func__函数。C++20:
std::from_chars函数,用于将字符串转换为数字类型。这使得处理异常时可以进行更精确的类型转换。std::exception类增加了一个名为is_same的成员函数,用于比较两个异常对象是否属于同一类型。其他异常类也继承了is_same函数。总之,随着C++标准的更新,C++标准异常类也在不断地改进和完善,以提供更好的错误处理和程序健壮性。