Re[18]: Наследование класса std::exception
От: Mak_71_rus Россия  
Дата: 06.07.10 16:17
Оценка:
M__>>Вот в знаменатель передан 0. Выбрасывается исключение logic_error. И?

M>Например, можно записать отчёт об ошибке в лог-файл, сообщить пользователю об обнаружении внутренней ошибки программы и о том, что программа будет закрыта, а потом убить процесс.


Ну собственно то же будет и при runtime_error/ Выходит, это чисто формальный вопрос о выборе типа ошибки: runtime или logic, а по сути от этого выбора ничего не зависит.
Re[19]: Наследование класса std::exception
От: Masterkent  
Дата: 06.07.10 17:25
Оценка:
Mak_71_rus:

M__>>>Вот в знаменатель передан 0. Выбрасывается исключение logic_error. И?


M>>Например, можно записать отчёт об ошибке в лог-файл, сообщить пользователю об обнаружении внутренней ошибки программы и о том, что программа будет закрыта, а потом убить процесс.


M__>Ну собственно то же будет и при runtime_error/


В этом случае я бы составил другой отчёт (где было бы указано, что суть внутренней ошибки заключается в отсутствии обработчика исключения в нужном месте).

M__>Выходит, это чисто формальный вопрос о выборе типа ошибки: runtime или logic, а по сути от этого выбора ничего не зависит.


От этого зависит, насколько легко будет разбираться в исходниках. Конечно, если не принимать это во внимание, то можно хоть "blah_blah_blah_error" бросать.
Re[6]: Наследование класса std::exception
От: Юрий Жмеренецкий ICQ 380412032
Дата: 07.07.10 03:42
Оценка: 6 (1)
Здравствуйте, rg45, Вы писали:

S>>аха, а такой вот код, это ошибка выполнения- или таки не совсем?


S>>
S>>rational<int> a(10,0);
S>>


R>А вот тут надо различать два разных момента: первый — это время, когда ошибка была допущена, второй — это когда она обнаруживается. В том месте, где ошибка обнаруживается, об истинных причинах ее возникновения как правило ничего не известно. И исключения как раз и являются средством реакции на ошибки в момент обнаружения. Ошибка, приведенная тобой в качестве примера, бесспорно, была допущена программистом на этапе кодирования, но обнаружится эта ошибка на этапе выполнения.


Но ошибку из этого примера можно обнаружить и до выполнения (при наличии документированных предусловий).

R>Поэтому вполне естественно, что код, обнаруживший эту ошибку сообщит о ней исключением типа runtime_error или производным от него.


Не соглашусь. В большинстве случаев логичнее проводить разделение не по линии "когда допущена"/"когда обнаружена", а по месту исправления (фактически — по расположению дефекта): если возникновение ошибки приводит к необходимости модификации кода — это логическая ошибка. Все остальное — ошибки времени выполнения. В этом случае "исправление" сводится к внешним (по отношению к программе) модификациям.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.