Язык программирования C++. Вводный курс



   abloy aperio, abloy dc135, abloy el460, цилиндры европейского стандарта        

Спецификации исключений - часть 3


/p>

}

doit()

может возбудить исключение типа exceptionType, которое не разрешено спецификацией action(). Однако функция компилируется успешно. Компилятор при этом генерирует код, гарантирующий, что при возбуждении исключения, нарушающего спецификацию, будет вызвана библиотечная функция unexpected().

Пустая спецификация  показывает, что функция не возбуждает никаких исключений:

extern void no_problem () throw();

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

Между типом возбужденного исключения и типом исключения, указанного в спецификации, не разрешается проводить никаких преобразований:

int convert( int parm ) throw(string)

{

   //...

   if ( somethingRather )

      // ошибка программы:

      // convert() не допускает исключения типа const char*

      throw "help!";

}

Выражение throw в функции convert()

возбуждает исключение типа строки символов в стиле языка C. Созданный объект-исключение имеет тип const char*. Обычно выражение типа const char*

можно привести к типу string. Однако спецификация не допускает преобразования типов, поэтому если convert()

возбуждает такое исключение, то вызывается unexpected(). Для исправления ошибки выражение throw

можно модифицировать так, чтобы оно явно преобразовывало значение выражения в тип string:

throw string( "help!" );




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