Здравствуйте, rg45, Вы писали:
S>>аха, а такой вот код, это ошибка выполнения- или таки не совсем?
S>>S>>rational<int> a(10,0);
S>>
R>А вот тут надо различать два разных момента: первый — это время, когда ошибка была допущена, второй — это когда она обнаруживается. В том месте, где ошибка обнаруживается, об истинных причинах ее возникновения как правило ничего не известно. И исключения как раз и являются средством реакции на ошибки в момент обнаружения. Ошибка, приведенная тобой в качестве примера, бесспорно, была допущена программистом на этапе кодирования, но обнаружится эта ошибка на этапе выполнения.
Но ошибку из этого примера можно обнаружить и до выполнения (при наличии документированных предусловий).
R>Поэтому вполне естественно, что код, обнаруживший эту ошибку сообщит о ней исключением типа runtime_error или производным от него.
Не соглашусь. В большинстве случаев логичнее проводить разделение не по линии "когда допущена"/"когда обнаружена", а по месту исправления (фактически — по расположению дефекта): если возникновение ошибки приводит к необходимости модификации кода — это логическая ошибка. Все остальное — ошибки времени выполнения. В этом случае "исправление" сводится к внешним (по отношению к программе) модификациям.