Язык программирования C++ для профессионалов



     Удивительные кошки смотрите на сайте. |       

Различение особых ситуаций - часть 2


void f2(Vector& v) { try { use_vectors(); } catch (Vector::Range) { // ... } }

Здесь f2() перехватит особую ситуацию Range, возникающую в use_vectors(), а особая ситуация Size будет оставлена для f1().

С точки зрения языка особая ситуация считается обработанной сразу при входе в тело ее обработчика. Поэтому все особые ситуации, запускаемые при выполнении этого обработчика, должны обрабатываться в функциях, вызвавших ту функцию, которая содержит проверяемый блок. Значит в следующем примере не возникнет бесконечного цикла:

try { // ... } catch (input_overflow) { // ... throw input_overflow(); }

Здесь input_overflow (переполнение при вводе) - имя глобального класса. Обработчики особых ситуаций могут быть вложенными:

try { // ... } catch (xxii) { try { // сложная реакция } catch (xxii) { // ошибка в процессе сложной реакции } }

Однако, такая вложенность редко бывает нужна в обычных программах, и чаще всего она является свидетельством плохого стиля.




Содержание  Назад  Вперед