C++标准库中的异常类位于
头文件中,它们是预定义的异常类,用于处理程序运行时可能发生的错误。这些异常类在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:
- 在C++03中,没有引入新的异常类,但
std::exception
类增加了一个名为what
的虚函数,用于返回异常的描述信息。其他异常类也继承了what
函数。
- 在C++03中,没有引入新的异常类,但
-
C++11:
- 在C++11中,引入了
noexcept
关键字,用于指定函数不会抛出异常。这有助于提高代码的性能和安全性。 std::exception
类增加了一个名为what
的const成员函数,用于返回异常的描述信息。其他异常类也继承了what
函数。
- 在C++11中,引入了
-
C++14:
- 在C++14中,引入了
std::exception_ptr
类型,用于表示一个异常对象的指针。这使得异常可以在不同的线程之间传递和处理。 std::exception
类增加了一个名为source_location
的成员函数,用于返回异常发生的源代码位置。其他异常类也继承了source_location
函数。
- 在C++14中,引入了
-
C++17:
- 在C++17中,引入了结构化绑定(structured bindings),允许将一个结构体、数组或元组解包为一个或多个变量。这使得处理异常更加方便。
std::exception
类增加了一个名为__func__
的成员函数,用于返回异常发生的函数名称。其他异常类也继承了__func__
函数。
-
C++20:
- 在C++20中,引入了
std::from_chars
函数,用于将字符串转换为数字类型。这使得处理异常时可以进行更精确的类型转换。 std::exception
类增加了一个名为is_same
的成员函数,用于比较两个异常对象是否属于同一类型。其他异常类也继承了is_same
函数。
- 在C++20中,引入了
总之,随着C++标准的更新,C++标准异常类也在不断地改进和完善,以提供更好的错误处理和程序健壮性。