R Справочное руководство по С++

R.15.4 Обработка особой ситуации.

   


Назад  |  Вперёд

Обработчик типа T, const T, T& или const& сопоставим с выражением-запуска, имеющим операнд типа E, если:

Рассмотрим пример:

           class Matherr { /* ... */ virtual vf(); };
           class Overflow : public Matherr { /* ... */ };
           class Underflow : public Matherr { /* ... */ };
           class Zerodivide : public Matherr { /* ... */ };

           void f()
           {
             try {
                g();
             }

             catch (Overflow oo) {
              // ...
             }
             catch (Matherr mm) {
              // ...
             }
           }

Здесь обработчик Overflow будет перехватывать ситуации типа Overflow, а обработчик Matherr будет перехватывать ситуации типа Matherr и всех типов, являющихся общими производными от Matherr, включая Underflow и Zerodivide.

Обработчики в проверяемом-блоке подбираются для данной особой ситуации в порядке их описания. Считается ошибкой , если обработчик для базового класса помещен перед обработчиком для производного класса, поскольку при таком расположении управление никогда не попадет к обработчику для производного класса.

Эллипсис ... в описании-особой-ситуации действует так же как, и в описании параметров функции, он сопоставим с любой особой ситуацией. Если задан эллипсис, то использующий его обработчик должен идти последним в проверяемом-блоке.

Если в проверяемом-блоке не произошло сопоставления ни с одним из обработчиков, поиск соответствующего обработчика продолжается в динамически объемлющем проверяемом-блоке. Если во всей программе не произошло сопоставления ни с одним обработчиком, вызывается функция terminate() ($$R.15.7).

Особая ситуация считается обработанной после входа в тело обработчика. В этот момент завершится "раскручивание стека".


Назад  |  Вперёд


OtDiatlovaOU
К началу книги

Оформление и дизайн книги OtDiatlovaOU.
Вся книга, архив.