标准异常层次结构的原因

时间:2011-05-16 16:22:48

标签: c++

这是一个挑剔的事情,它可能只是我的OCD爆炸,但我想知道为什么标准异常类层次结构设置原样。

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似乎完全不合适。

是否有一些历史或技术上的原因,这样的结构是这样的?

1 个答案:

答案 0 :(得分:3)

如果我没记错的话,逻辑是:

  • logic_error相当于assert,但行为不那么激烈
  • runtime_error将成为所有其他人的基础

但是,正如您所注意到的那样,即使在标准库中,它也不太适用。

我猜的主要问题是主观性:是std::out_of_range一个logic_error还是一个runtime_error

这是主观的......