c++中的stexcept与exception头文件

stdexcept vs exception Headers in c++

本文关键字:文件 exception 中的 stexcept c++      更新时间:2023-10-16

从cplusplus.com对<exception><stdexcept>的参考来看,<exception>似乎足以在c++ 98或更高版本的c++中处理异常。

为什么c++有两个头文件用于异常处理?这对我的发展有什么影响?我应该使用哪个标题?

  • <stdexcept>:定义一组标准异常,库和程序都可以使用这些异常来报告常见错误。

  • <exception>:为标准库元素抛出的所有异常定义基类(即std::exception),以及帮助处理异常的几个类型和实用程序。

所以,<exception>只定义了类std::exception,而<stdexcept>定义了几个继承自std::exception的类(例如,std::logic_error, std::out_of_range)。这就是<stdexcept>包含<exception>的原因。

它们在单独的头文件中,因为如果您想定义继承std::exception的自己的异常类(而不使用<stdexcept>的类),您可以避免不必要的定义。

一个实际的考虑是<stdexcept>需要std::string定义(异常构造函数接受std::string并具有std::string数据成员),而捕获和查询std::exception则不需要std::string声明或定义。

也就是说,std::exception处理器只需要<exception>。throw站点需要它所抛出的特定异常类的头文件

exception是供用户继承和定义自己的异常。

stexcept 用于捕获和处理标准异常