标准异常层次结构的设计原因

6

这是一个挑剔的问题,可能只是我的强迫症发作了,但我想知道为什么标准的异常类层次结构被设置为它所设置的。

exception
  bad_alloc
  bad_cast
  bad_typeid
  bad_exception
  ios_base::failure
  runtime_error
    subclasses...
  logic_error
    subclasses...

所有的bad_*异常是不是可以全部归为类似于lang_support_error这样的一个父类?并且ios_base::failure异常似乎完全不合适。
这个异常类的层次结构为什么会演变成现在这样,是否有一些历史或技术原因?

3
说明设计异常类层次结构是多么困难(且基本上是无意义的),这正说明了问题 :-) - user2100815
1个回答

3
如果我没记错的话,当时的逻辑是:
  • logic_error 相当于一个 assert,但其行为不那么激进
  • runtime_error 是所有其他异常的基类
然而,正如你所注意到的,即使在标准库中也并不完全如此。
我认为主要问题在于主观性:`std::out_of_range` 是 `logic_error` 还是 `runtime_error`?这是主观的…

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接