Namespaces
Variants

std:: bad_variant_access

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

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

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

Все функции-члены std::bad_variant_access являются constexpr : возможно создавать и использовать объекты std::bad_variant_access при вычислении константного выражения.

Однако объекты std::bad_variant_access обычно не могут быть constexpr , поскольку любая динамически выделенная память должна быть освобождена в том же вычислении константного выражения.

(since C++26)

Содержание

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

(constructor)
создаёт новый объект bad_variant_access
(public member function)
operator=
заменяет объект bad_variant_access
(public member function)
what
возвращает поясняющую строку
(public member function)

std::bad_variant_access:: bad_variant_access

bad_variant_access ( ) noexcept ;
(1) (since C++17)
(constexpr since C++26)
bad_variant_access ( const bad_variant_access & other ) noexcept ;
(2) (since C++17)
(constexpr since C++26)

Создает новый объект 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)
(constexpr начиная с C++26)

Присваивает содержимое из объекта 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)
(constexpr начиная с C++26)

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

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

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

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

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

Примечания

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

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

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

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

Примечания

Макрос тестирования возможностей Значение Стандарт Функция
__cpp_lib_constexpr_exceptions 202502L (C++26) constexpr std::bad_variant_access

Пример

#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

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

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