Стандартные исключения (std::exception)
std::exception - это базовый класс для всех стандартных исключений в C++, определённый в заголовочном файле `
Он предоставляет основной интерфейс для обработки исключений и содержит информацию о типе исключения. Все стандартные исключения являются потомками класса std::exception.
Синтаксис для использования std::exception следующий:
cpp
try {
// код, который может вызвать исключение
} catch (const std::exception& e) {
// обработка исключения
}
Примеры стандартных исключений:
1. std::logic_error - генерируется, когда происходят ошибки в логике программы:
cpp
try {
if (x < 0) {
throw std::logic_error("Invalid input: x should be positive");
}
} catch (const std::logic_error& e) {
std::cout << "Caught logic error: " << e.what() << std::endl;
}
2. std::runtime_error - генерируется, когда происходят ошибки во время выполнения программы:
cpp
try {
file.open("nonexistent_file.txt");
if (!file.is_open()) {
throw std::runtime_error("Failed to open file");
}
} catch (const std::runtime_error& e) {
std::cout << "Caught runtime error: " << e.what() << std::endl;
}
3. std::invalid_argument - генерируется, когда переданы некорректные аргументы функции:
cpp
void divide(int x, int y) {
if (y == 0) {
throw std::invalid_argument("Division by zero");
}
// деление x на y
}
try {
divide(10, 0);
} catch (const std::invalid_argument& e) {
std::cout << "Caught invalid argument: " << e.what() << std::endl;
}
Класс std::exception также предоставляет метод `.what()`, который возвращает константную строку, описывающую исключение. Этот метод может быть переопределён в производных классах, чтобы указать дополнительные детали ошибки.
Важно отметить, что при использовании исключений необходимо быть внимательным и надежно обрабатывать исключения, чтобы предотвратить утечки ресурсов и неожиданное прекращение программы.