stdexcept与c ++中的异常标题

时间:2014-08-06 14:31:58

标签: c++ c++11 exception-handling

<exception>的cplusplus.com参考和<stdexcept>的参考中,似乎<exception>足以在C ++ 98或更高版本的C ++中进行异常处理。

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

3 个答案:

答案 0 :(得分:39)

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

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

因此,<exception>只定义了类std::exception,而<stdexcept>定义了从std::exception继承的几个类(例如std::logic_error,{{1} })。这就是为什么std::out_of_range包含<stdexcept>

它们位于单独的标头中,因为如果要定义自己的继承<exception>的异常类(而不是使用std::exception中的类),则可以避免不必要的定义。

答案 1 :(得分:12)

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

换句话说,std::exception处理程序只需要<exception>。 throw网站需要它抛出的特定异常类的标题。

答案 2 :(得分:0)

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

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