#c
#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. Просто показывает, насколько сложно (и, по сути, бессмысленно) проектировать иерархии исключений 🙂
Ответ №1:
Если я правильно помню, логика была:
logic_error
было бы эквивалентомassert
, но с менее радикальным поведениемruntime_error
было бы основой для всех остальных
Однако, как вы заметили, это не совсем верно даже в самой стандартной библиотеке.
Основная проблема, я полагаю, заключается в субъективности: std::out_of_range
a logic_error
или runtime_error
?
Это субъективно…