На этом шаге мы рассмотрим способы генерации стандартных исключений.
Стандартные исключения также могут генерироваться в пользовательских библиотеках или программах. Объекты всех классов стандартных исключений, предоставляющих такую возможность, создаются с одним параметром: объектом 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.