Spec-Zone.ru › C++

std::bad_variant_access

Определён в заголовочном файле <variant>
class bad_variant_access : public std::exception
(начиная с C++17)

std::bad_variant_access — это тип исключения, выбрасываемого в следующих ситуациях:

  • std::get(std::variant) вызывается с индексом или типом, не соответствующим текущей активной альтернативе.
  • std::visit вызывается для посещения варианта, который находится в состоянии valueless_by_exception.
  • std::variant::visit вызывается для посещения варианта, который находится в состоянии valueless_by_exception.
(начиная с C++26)

Функции-члены

(constructor)
создаёт новый объект bad_variant_access
(открытая функция-член)
operator=
заменяет объект bad_variant_access
(открытая функция-член)
what
возвращает пояснительную строку
(открытая функция-член)

std::bad_variant_access::bad_variant_access

bad_variant_access() noexcept;
(1) (начиная с C++17)
bad_variant_access( const bad_variant_access& other ) noexcept;
(2) (начиная с C++17)

Создаёт новый объект bad_variant_access с завершающей нулём байтовой строкой, определяемой реализацией и доступной через what().

1) Конструктор по умолчанию.
2) Конструктор копирования. Если *this и other имеют динамический тип std::bad_variant_access, то std::strcmp(what(), other.what()) == 0.

Параметры

other - другой объект исключения для копирования

std::bad_variant_access::operator=

bad_variant_access& operator=( const bad_variant_access& other ) noexcept;
(начиная с C++17)

Присваивает содержимое из other. Если *this и other имеют динамический тип std::bad_variant_access, то после присваивания std::strcmp(what(), other.what()) == 0.

Параметры

other - другой объект исключения, из которого выполняется присваивание

Возвращаемое значение

*this

std::bad_variant_access::what

virtual const char* what() const noexcept;
(начиная с C++17)

Возвращает пояснительную строку.

Возвращаемое значение

Указатель на завершающую нулём строку, определяемую реализацией и содержащую пояснительную информацию. Строка подходит для преобразования и отображения в виде std::wstring. Указатель гарантированно остаётся действительным как минимум до уничтожения объекта исключения, из которого он получен, либо до вызова неконстантной функции-члена (например, оператора присваивания копированием) для объекта исключения.

Во время константного вычисления возвращаемая строка кодируется с использованием обычной кодировки литералов.

(начиная с C++26)

Примечания

Реализации могут, но не обязаны переопределять what().

Унаследовано от std::exception

Функции-члены

(деструктор)
[виртуальная]
уничтожает объект исключения
(виртуальная открытая функция-член класса std::exception)
what
[виртуальная]
возвращает пояснительную строку
(виртуальная открытая функция-член класса std::exception)

Пример

#include <iostream>
#include <variant>

int main()
{
    std::variant<int, float> v;
    v = 12;
    try
    {
        std::get<float>(v);
    }
    catch (const std::bad_variant_access& e)
    {
        std::cout << e.what() << '\n';
    }
}

Возможный вывод:

bad_variant_access

См. также

get(std::variant)
(C++17)
читает значение варианта по индексу или типу (если тип уникален), при ошибке выбрасывает исключение
(шаблон функции)
visit
(C++17)
вызывает предоставленный функтор с аргументами, хранящимися в одном или нескольких объектах variant
(шаблон функции)
visit
(C++26)
вызывает предоставленный функтор с аргументом, хранящимся в variant
(открытая функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/variant/bad_variant_access

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API