Namespaces
Variants

std:: bad_optional_access

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

Определяет тип объекта, который будет выброшен при std::optional::value при обращении к объекту optional, не содержащему значения.

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

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

(since C++26)
cpp/error/exception std-bad optional access-inheritance-lwg2806.svg

Диаграмма наследования

Содержание

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

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

std::bad_optional_access:: bad_optional_access

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

Создает новый объект bad_optional_access с определенной реализацией нуль-терминированной строкой байтов, доступной через what() .

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

Параметры

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

std::bad_optional_access:: operator=

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

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

Параметры

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

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

* this

std::bad_optional_access:: what

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

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

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

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

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

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

Примечания

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

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

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

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

Примечания

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

Пример

#include <iostream>
#include <optional>
int main()
{
    std::optional<int> opt; // создает пустой optional
    try
    {
        [[maybe_unused]] auto x = opt.value(); // выбрасывает исключение
    {
    catch (const std::bad_optional_access& ex)
    {
        std::cout << ex.what() << '\n';
    }
}

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

bad optional access

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

исключение, указывающее на проверенный доступ к expected , содержащему непредвиденное значение
(шаблон класса)
исключение, выбрасываемое при недопустимых обращениях к значению variant
(класс)