Назад к вопросам
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;
}