R.15.5 Спецификации особых ситуаций

We use cookies. Read the Privacy and Cookie Policy

R.15.5 Спецификации особых ситуаций

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

спецификация-особой-ситуации:

 throw ( список-типов opt )

список-типов:

 имя-типа

 список-типов , имя-типа

Приведем пример:

void f() throw (X,Y)

{

 //…

}

Если функция попробует запустить неуказанную в списке ситуацию, управление передается функции unexpected(), см. §R.15.8.

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

Функция, в которой отсутствует спецификация-особой-ситуации, может запустить любую особую ситуацию.

Функция с пустой спецификацией-особых-ситуаций (throw()) не должна запускать никаких особых ситуаций.

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

Конструкция спецификация-особой-ситуации не относится к типу функции.