Мы знаем, что класс исключения имеет два производных класса: logic_error и runtime_error.
logic_error имеет четыре производных класса: domain_error, invalid_argument, length_error и out_of_range. > .
runtime_error имеет три производных класса: range_error, overflow_error и underflow_error.
Хотя некоторые из них не требуют пояснений, например overflow_error и underflow_error, некоторые из них не так понятны, особенно range_error, как MSDN, так и cplusplus просто говорит "сообщить об ошибке диапазона", что близко к молчанию, как это отличается от out_of_range и domain_error???
Другой вопрос, когда я бросаю исключение, которое я должен выбрать? Например, In reverse_string (char * s), какое исключение выбрано, когда s равно NULL? В float calc_ellipse_area (float a, float b), который нужно бросить, когда a или b равно <= 0? Что бросать, когда a == b (строго говоря, круг не является эллипсом!)?
Наконец, на самом деле, действительно ли имеет значение, если я создаю исключение, которое неправильно классифицировано?