РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
589 of 815 menu

Класс bad_variant_access

Класс bad_variant_access - это исключение, которое выбрасывается функциями std::get и std::get_if при попытке получить доступ к альтернативе, которая в данный момент не хранится в объекте std::variant. Это исключение наследуется от класса std::exception и не имеет дополнительных методов, кроме унаследованного метода what. Оно позволяет безопасно обрабатывать ошибки доступа к вариантам с помощью стандартных механизмов обработки исключений.

Синтаксис

class bad_variant_access : public exception;

Пример

Давайте создадим объект std::variant, который хранит целое число, и попробуем получить из него строку. Это приведёт к выбросу исключения bad_variant_access:

#include <iostream> #include <variant> #include <string> using namespace std; int main() { variant<int, string> v = 123; try { cout << get<string>(v) << endl; } catch (const bad_variant_access& e) { cout << "Error: " << e.what() << endl; } return 0; }

Результат выполнения кода:

"Error: bad variant access"

Пример

Давайте используем функцию std::get_if, которая возвращает указатель на значение, если тип совпадает, или nullptr в противном случае. При несовпадении типа исключение не выбрасывается, что позволяет избежать ошибки:

#include <iostream> #include <variant> #include <string> using namespace std; int main() { variant<int, string> v = "abcde"; if (auto p = get_if<int>(&v)) { cout << "Int: " << *p << endl; } else { cout << "Not an int" << endl; } return 0; }

Результат выполнения кода:

"Not an int"

Смотрите также

  • класс exception,
    который является базовым классом для всех исключений
  • метод what,
    который возвращает описание исключения
  • оператор throw,
    который выбрасывает исключение
  • блок catch,
    который перехватывает исключение
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить