这是一个挑剔的事情,它可能只是我的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似乎完全不合适。
是否有一些历史或技术上的原因,这样的结构是这样的?
答案 0 :(得分:3)
如果我没记错的话,逻辑是:
logic_error
相当于assert
,但行为不那么激烈runtime_error
将成为所有其他人的基础但是,正如您所注意到的那样,即使在标准库中,它也不太适用。
我猜的主要问题是主观性:是std::out_of_range
一个logic_error
还是一个runtime_error
?
这是主观的......