Назад к вопросам
Middle
116
questionbank
При помощи чего сохраняются исключения в C++?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
При помощи объектов. При выбрасывании исключения с помощью throw создается временный объект, который затем передается механизму обработки исключений. Тип этого объекта определяет, какой обработчик catch будет выбран.
Вот пример демонстрации сохранения исключений в виде объектов:
#include <iostream>
#include <stdexcept>
class MyException {
int error_code;
public:
MyException(int code) : error_code(code) {}
int get_code() const { return error_code; }
};
void test_func(int val) {
if (val < 0) {
// Выбрасываем исключение - объект класса MyException
throw MyException(-1);
}
if (val == 0) {
// Выбрасываем стандартное исключение - объект класса std::runtime_error
throw std::runtime_error("Value cannot be zero.");
}
std::cout << "Value is positive: " << val << std::endl;
}
int main() {
try {
test_func(-5);
} catch (const MyException& e) {
// Перехватываем исключение по типу объекта MyException
std::cerr << "Caught MyException with code: " << e.get_code() << std::endl;
} catch (const std::runtime_error& e) {
// Перехватываем исключение по типу объекта std::runtime_error
std::cerr << "Caught std::runtime_error: " << e.what() << std::endl;
} catch (...) {
// Перехватываем любое другое исключение
std::cerr << "Caught unknown exception." << std::endl;
}
try {
test_func(0);
} catch (const std::exception& e) {
// Можно перехватывать базовый класс для стандартных исключений
std::cerr << "Caught standard exception: " << e.what() << std::endl;
}
return 0;
}