Языки программирования - концепции и принципы

Вспомните наш совет не использовать


Вспомните наш совет не использовать обра­ботчик исключений как замену для гораздо более эффективного условного оператора.

11.4. Исключения в C++

 

Обработка исключений в C++ во многом сходна с той, которая применяется в языке Ada, а именно, исключение можно явно возбудить, обработать соот­ветствующим обработчиком (если он есть), после чего блок (подпрограмма) окажется завершенным. Отличия в следующем:

• Вместо приписывания обработчика исключения к подпрограмме ис­пользуется специальный синтаксис для указания группы операторов, к которым применяется обработчик.

• Исключения идентифицируются типом параметра, а не именем. Имеет­ся специальный эквивалент синтаксиса others для обработки исклю­чений, не упомянутых явно.

• Можно создавать семейства исключений, используя наследование (см. гл. 14).

• Если в языке Ada для исключения в программе не предусмотрен обра­ботчик, то вызывается системный обработчик. В C++ программист мо­жет определить функцию terminate(), которая вызывается, когда исклю­чение не обработано.

В следующем примере блок try идентифицирует область действия последова­тельности операторов, для которых обработчики исключений (обозначенные как catch-блоки) являются активными. Throw-оператор приводит к возбужде­нию исключений; в этом случае оно будет обработано вторым catch-блоком, так как строковый параметр throw-оператора соответствует параметру char* второго catch-блока:

void proc()

{

       …                                            // Исключения здесь не обрабатываются

       try {

        …

       throw "Invalid data";              // Возбудить исключение

     }

      catch (int i) {

       …                                           // Обработчик исключения

      }

        catch (char *s) {

       …                                           // Обработчик исключения

      }

        catch (...) {                           // Прочие исключения


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