am> using namespace std: class
Автор admin Понедельник, 4 мая 2009 11:32
am> using namespace std: class Up {}; class Fit {}; void g(); void f(int i) throw (Up, Fit) { switch(i) { case 1: throw Up(); case 2: throw Fit(): } g(): } // void g() {} // Версия 1 void g() { throw 47; } // Версия 2 void my_unexpected() { cout « “unexpected exception thrown” « endl; exit(O); } int main() { set_unexpected(my_unexpected); // (возвращаемое значение игнорируется) for(int i = 1; i <=3; i++) try { f(i): } catch(Up) { cout « “Up caught” « endl: } catch(Fit) { cout « “Fit caught” « endl: } } ///:- Классы Up и Fit предназначены только для запуска в качестве исключений. Обычно классы исключений имеют небольшие размеры, но конечно, они могут содержать дополнительную информацию, которую могут запрашивать обработчики исключений. Функция f() в своей спецификации исключений обещает запускать исключения только типов Up и Fit. Судя по определению функции, это действительно так — Спецификации исключений 47 первая версия д(), вызываемая из f(), не запускает никаких исключений, поэтому обещание выполняется. Но если кто-нибудь изменит функцию д() так, что она будет запускать исключения другого типа (на
Комментарии закрыты.
Последние комментарии