По умолчанию при ошибках ввода-вывода исключения не генерируются. Однако можно указать, при установке каких флагов состояния должно генерироваться исключение. В состав класса basic__ios (см. п. п. 27.4.4 в [1]) входит метод exceptions (), который и позволяет это сделать. Прототип метода:
void exceptions(iostate flags);
Указать на необходимость генерации исключения при установке флага ios: : badbit можно, так:
stream.exceptions(ios:ibadbit);
Флаги, как обычно, можно комбинировать, например:
stream.exceptions(ios::badbi 11ios::faiIbit);
Исключения будут генерироваться не только во время операций ввода-вывода, но и при установке флагов методами clear () и setstate().
Если аргумент равен 0 или ios:: goodbi t, исключения генерироваться не будут.
Вызов без аргумента возвращает текущие флаги, при установке которых генерируется исключение, например:
ios_base::iostate flags = stream.exceptions();
Если возвращается флаг goodbi t, исключения не генерируются.
Генерируемые исключения являются объектами класса iosbase: : failure (см. п. п. 27.4.2.1.1 в [1]), который является наследником класса exception (см. главу 7). Класс ios_base: :failure выглядит следующим образом:
class ios_base::failure : public exception t public:
explicit failure(const string&msg); virtual ?failure();
virtual const char* what() const throwQ;
};
Как видите, сложного ничего нет. |