Хелпикс

Главная

Контакты

Случайная статья





stl исключения



stl исключения

В стандартной библиотеке C++ определены два заголовка, которые имеют отношение к обработке исключительных ситуаций, или исключений: <exception> и <stdexcept>. Исключения используются для сигнализации об ошибочных условиях.

Заголовок <exception> определяет классы, типы и функции, которые связаны с обработкой исключений. Вот как выглядят определения классов.

class exception {public:   exception() throw();   exception(const bad_exception &ob) throw();   virtual -exception() throw();   exception &operator=(const exception &ob) throw();   virtual const char *what(() const throw();}; class bad_exception: public exception {public:   bad_exception() throw();   bad_exception(const bad_exception &ob) throw();   virtual ~bad_exception() throw();   bad_exception &operator=(const bad_exception &ob) throw();   virtual const char *what(() const throw();};

Класс exception - это базовый класс для всех исключений, определенных стандартной библиотекой C++. Класс bad_exception представляет собой тип исключения, генерируемого функцией unexpected(). В каждом из этих классов функция-член what() возвращает указатель на строку с завершающим нулевым символом, которая описывает соответствующее исключение.

Класс exception - это базовый класс для всех исключений, определенных стандартной библиотекой C++. Класс bad_exception представляет собой тип исключения, генерируемого функцией unexpected(). В каждом из этих классов функция-член what() возвращает указатель на строку с завершающим нулевым символом, которая описывает соответствующее исключение.

От класса exception наследованы ряд других важных классов. Класс bad_alloc используется в случае неудачного выполнения оператора new. Класс bad_typeid оказывается полезным при попытке выполнения недопустимого выражения typeid. Наконец, класс bad_cast используется при попытке выполнить неверную операцию динамического приведения типа. Эти классы содержат те же члены, что и класс exception.

Ниже приводятся типы, определенные в заголовке <exception>.

Тип Значение
terminate_handler typedef void(*terminate_handler)();
unexpected_handler typedef void(*unexpected_handler)();

В следующей таблице перечислены функции, определенные в заголовке <exception>.

Функция Назначение
terminate_handler set_terminate(terminate_handler fn) throw(); Устанавливает функцию, заданную параметром fn, в качестве обработчика завершения работы. Возвращает указатель на прежний обработчик завершения
unexpected_handler set_unexpected(unexpected_handler fn) throw(); Устанавливает функцию, заданную параметром fn, в качестве обработчика непредвиденного исключения. Возвращает указатель на прежний обработчик непредвиденного исключения
void terminate(); Вызывает обработчик завершения, когда не обработано фатальное исключение. По умолчанию вызывает функцию abort()

bool uncaught_exception();

Возвращает значение true, если исключение не перехвачено
void unexpected(); Вызывает обработчик непредвиденного исключения, если функция генерирует неразрешенное исключение. По умолчанию вызывает функцию terminate()

Заголовок <stdexcept> определяет ряд стандартных исключений, которые могут быть сгенерированы библиотечными функциями C++ и/или системой времени выполнения. Существует два общих типа исключений, определяемых заголовком <stdexcept>: логические ошибки и ошибки времени выполнения(динамические ошибки). Логические ошибки обязаны своим существованием программистам. Динамические ошибки возникают из-за наличия ошибок в библиотечных функциях или системе времени выполнения и не подвластны контролю со стороны программиста.

Определенные в языке C++ стандартные исключения, вызываемые логическими ошибками, выведены из базового класса logic_error. Они приведены в следующей таблице.

Исключение Причина возникновения
domain_error Возникла ошибка домена
invalid_argument В вызове функции использован неверный аргумент
length_error Была предпринята попытка создания слишком большого объекта
out_of_range Аргумент функции не попал в требуемый диапазон

Перечисленные ниже динамические исключения выведены из базового класса runtime error.

Исключение Причина возникновения
overflow_error Возникло арифметическое переполнение
range_error Возникла ошибка внутреннего диапазона
underflow error Возникла потеря значимости

 

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.