На этом шаге мы рассмотрим способы генерации стандартных исключений.
Стандартные исключения также могут генерироваться в пользовательских библиотеках или программах. Объекты всех
классов стандартных исключений, предоставляющих такую возможность, создаются с одним параметром: объектом
string с описанием, которое должно возвращаться функцией what(). Например, определение класса
logic_error выглядит так:
namespace std { class logic_error : public exception { public: explicit logic error (const strings whatString); }; }
Набор стандартных исключений, которые могут генерироваться в пользовательских библиотеках или программах,
включает класс logic_error с производными классами, класс runtime_error с производными классами,
а также класс ios_base::failure. Следовательно, вы не сможете генерировать исключения базового класса
exception, а также любых классов исключений, предоставляющих языковую поддержку.
Чтобы генерировать стандартное исключение, просто создайте строку с описанием и передайте ее объекту исключения
в команде throw:
std::string s; . . . . throw std::out_of_range(s);
Автоматическое преобразование char* в string позволяет использовать строковый литерал:
throw std::out_of_range("out_of_range (somewhere.somehow)");
На следующем шаге мы рассмотрим классы исключений, производные от exception.