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


Иерархия классов исключений в стандартной библиотеке C++ - часть 2


Помимо корневого exception, в стандартной библиотеке есть и другие классы, которые допустимо использовать в программе для извещения об ошибках, обычно подразделяемых на две больших категории: логические ошибки и ошибки времени выполнения.

Логические ошибки обусловлены нарушением внутренней логики программы, например логических предусловий или инвариантов класса. Предполагается, что их можно найти и предотвратить еще до начала выполнения программы. В стандартной библиотеке определены следующие такие ошибки:

namespace std {

   class logic_error : public exception {  // логическая ошибка

   public:

      explicit logic_error( const string &what_arg );

   };

   class invalid_argument : public logic_error { // неверный аргумент

   public:

      explicit invalid_argument( const string &what_arg );

   };

   class out_of_range : public logic_error { // вне диапазона

   public:

      explicit out_of_range( const string &what_arg );

   };

   class length_error : public logic_error { // неверная длина

   public:

      explicit length_error( const string &what_arg );

   };

   class domain_error : public logic_error { // вне допустимой области

   public:

      explicit domain_error( const string &what_arg );

   };

}

Функция может возбудить исключение invalid_argument, если получит аргумент с некорректным значением; в конкретной ситуации, когда значение аргумента выходит за пределы допустимого диапазона, разрешается возбудить исключение out_of_range, а length_error

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

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

namespace std {

   class runtime_error : public exception {  // ошибка времени выполнения

   public:

      explicit runtime_error( const string &what_arg );

   };

   class range_error : public runtime_error { // ошибка диапазона

   public:

      explicit range_error( const string &what_arg );

   };

   class overflow_error : public runtime_error { // переполнение

   public:

      explicit overflow_error( const string &what_arg );

   };

   class underflow_error : public runtime_error { // потеря значимости

   public:

      explicit underflow_error( const string &what_arg );

   };

<


Начало  Назад  Вперед



Книжный магазин