Namespaces
Variants

std::expected<T,E>:: expected

From cppreference.net
Utilities library
(Примечание: В данном фрагменте HTML отсутствует текстовое содержимое для перевода - присутствуют только HTML-теги и атрибуты, которые согласно инструкциям не подлежат переводу)
Основной шаблон
constexpr expected ( ) ;
(1) (начиная с C++23)
constexpr expected ( const expected & other ) ;
(2) (начиная с C++23)
constexpr expected ( expected && other ) noexcept ( /* см. ниже */ ) ;
(3) (начиная с C++23)
template < class U, class G >
constexpr expected ( const expected < U, G > & other ) ;
(4) (начиная с C++23)
(условно явный)
template < class U, class G >
constexpr expected ( expected < U, G > && other ) ;
(5) (начиная с C++23)
(условно явный)
template < class U = std:: remove_cv_t < T > >
constexpr explicit ( ! std:: is_convertible_v < U, T > ) expected ( U && v ) ;
(6) (начиная с C++23)
template < class G >

constexpr explicit ( ! std:: is_convertible_v < const G & , E > )

expected ( const std:: unexpected < G > & e ) ;
(7) (начиная с C++23)
template < class G >

constexpr explicit ( ! std:: is_convertible_v < G, E > )

expected ( std:: unexpected < G > && e ) ;
(8) (начиная с C++23)
template < class ... Args >
constexpr explicit expected ( std:: in_place_t , Args && ... args ) ;
(9) (начиная с C++23)
template < class U, class ... Args >

constexpr explicit
expected ( std:: in_place_t ,

std:: initializer_list < U > il, Args && ... args ) ;
(10) (начиная с C++23)
template < class ... Args >
constexpr explicit expected ( std:: unexpect_t , Args && ... args ) ;
(11) (начиная с C++23)
template < class U, class ... Args >

constexpr explicit
expected ( std:: unexpect_t ,

std:: initializer_list < U > il, Args && ... args ) ;
(12) (начиная с C++23)
void частичная специализация
constexpr expected ( ) ;
(13) (начиная с C++23)
constexpr expected ( const expected & other ) ;
(14) (начиная с C++23)
constexpr expected ( expected && other )
noexcept ( std:: is_nothrow_move_constructible_v < E > ) ;
(15) (начиная с C++23)
template < class U, class G >

constexpr explicit ( ! std:: is_convertible_v < const G & , E > )

expected ( const expected < U, G > & other ) ;
(16) (начиная с C++23)
template < class U, class G >

constexpr explicit ( ! std:: is_convertible_v < G, E > )

expected ( expected < U, G > && other ) ;
(17) (начиная с C++23)
template < class G >

constexpr explicit ( ! std:: is_convertible_v < const G & , E > )

expected ( const std:: unexpected < G > & e ) ;
(18) (начиная с C++23)
template < class G >

constexpr explicit ( ! std:: is_convertible_v < G, E > )

expected ( std:: unexpected < G > && e ) ;
(19) (начиная с C++23)
constexpr explicit expected ( std:: in_place_t ) ;
(20) (начиная с C++23)
template < class ... Args >
constexpr explicit expected ( std:: unexpect_t , Args && ... args ) ;
(21) (начиная с C++23)
template < class U, class ... Args >

constexpr explicit
expected ( std:: unexpect_t ,

std:: initializer_list < U > il, Args && ... args ) ;
(22) (начиная с C++23)

Создает новый объект expected .

Содержание

Параметры

other - другой expected объект, чьё содержащееся значение копируется
e - std::unexpected объект, чьё содержащееся значение копируется
v - значение, используемое для инициализации содержащегося значения
args - аргументы, используемые для инициализации содержащегося значения
il - список инициализации, используемый для инициализации содержащегося значения

Эффекты

Конструкторы первичного шаблона

**Примечание:** Весь код C++ внутри тегов ` ` сохранен без изменений, как и требовалось. HTML-структура и атрибуты также сохранены в оригинальном виде. **Примечание:** В данном фрагменте HTML не содержится переводимого текста за пределами тегов ` `, `
`, `` и C++ специфических терминов. Все числовые значения, дефисы и ключевые слова C++ (такие как `std::forward`, `U`, `v`, `true`) сохранены в оригинальном виде согласно требованиям.
**Примечание:** В данном фрагменте HTML: - Все HTML-теги и атрибуты сохранены без изменений - Текст внутри тегов ` ` (C++ код) не переведен - C++ специфические термины (`std::forward`, `Args`, `args`, `true`) сохранены в оригинале - Переведен только обычный текст вне специальных тегов **Примечание:** В данном фрагменте HTML: - Число "10" в ссылке не требует перевода - Текст внутри тегов ` ` (C++ код) не переводится согласно инструкциям - HTML-теги и атрибуты сохранены без изменений - Форматирование полностью сохранено **Примечание:** В данном фрагменте HTML: - Число "12" оставлено без перевода, так как является номером версии - Текст внутри тегов ` ` не переведен, так как содержит C++ код - HTML-теги и атрибуты сохранены без изменений - Форматирование полностью сохранено
Перегрузка Способ
инициализации
Инициализатор для... has_value()
после конструирования
ожидаемое значение неожиданное значение
( 1 ) Значение (пусто) - true
( 2 ) Прямая
(не-список)
* other other. error ( ) other. has_value ( )
  • Если true , инициализирует только ожидаемое значение.
  • Если false , инициализирует только неожиданное значение.
( 3 ) std :: move ( * other ) std :: move ( other. error ( ) )
( 4 ) std:: forward < const U & >
( * other )
std:: forward < const G & >
( other. error ( ) )
( 5 ) std:: forward < U > ( * other ) std:: forward < G >
( other. error ( ) )
( 6 ) std:: forward < U > ( v ) - true
( 7 ) - std:: forward < const G & >
( e. error ( ) )
false
( 8 ) std:: forward < G > ( e. error ( ) )
( 9 ) std:: forward < Args > ( args ) ... - true
( 10 ) il,
std:: forward < Args > ( args ) ...
( 11 ) - std:: forward < Args > ( args ) ... false
( 12 ) il,
std:: forward < Args > ( args ) ...

void конструкторы частичной специализации

Перегрузка Метод инициализации Инициализатор для unexpected значения has_value() после конструирования
( 13 ) Н/Д - true
( 14 ) Прямая (не списковая) rhs. error ( ) other. has_value ( )
  • Если false , инициализирует unexpected значение.
( 15 ) std :: move ( rhs. error )
( 16 ) std:: forward < const G & > ( rhs. error ( ) )
( 17 ) std:: forward < G > ( rhs. error ( ) )
( 18 ) std:: forward < const G & > ( e. error ( ) ) false
( 19 ) std:: forward < G > ( e. error ( ) )
( 20 ) Н/Д - true
( 21 ) Прямая (не списковая) std:: forward < Args > ( args ) ... false
( 22 ) il, std:: forward < Args > ( args ) ...

Ограничения и дополнительная информация

Конструкторы первичного шаблона

1) Эта перегрузка участвует в разрешении перегрузки только если std:: is_default_constructible_v < T > равно true .
2) Этот конструктор объявлен как удалённый, если только std:: is_copy_constructible_v < T > и std:: is_copy_constructible_v < E > оба не являются true .
Этот конструктор является тривиальным, если std:: is_trivially_copy_constructible_v < T > и std:: is_trivially_copy_constructible_v < E > оба равны true .
3) Эта перегрузка участвует в разрешении перегрузки только если std:: is_move_constructible_v < T > и std:: is_move_constructible_v < E > оба имеют значение true .
Этот конструктор является тривиальным, если std:: is_trivially_move_constructible_v < T > и std:: is_trivially_move_constructible_v < E > оба равны true .
4,5) These overloads participate in overload resolution only if all following conditions are satisfied:
4) Этот конструктор является explicit если std:: is_convertible_v < const U & , T > или std:: is_convertible_v < const G & , E > равно false .
5) Этот конструктор является explicit , если std:: is_convertible_v < U, T > или std:: is_convertible_v < G, E > равно false .
6) Эта перегрузка участвует в разрешении перегрузки только при выполнении всех следующих условий:
7) Эта перегрузка участвует в разрешении перегрузки только если std:: is_constructible_v < E, const G & > равно true .
8) Эта перегрузка участвует в разрешении перегрузки только если std:: is_constructible_v < E, G > равно true .
9) Эта перегрузка участвует в разрешении перегрузки только если std:: is_constructible_v < T, Args... > равно true .
10) Эта перегрузка участвует в разрешении перегрузки только если std:: is_constructible_v < T, std:: initializer_list < U > & , Args... > равно true .
11) Эта перегрузка участвует в разрешении перегрузки только если std:: is_constructible_v < E, Args... > равно true .
12) Эта перегрузка участвует в разрешении перегрузки только если std:: is_constructible_v < E, std:: initializer_list < U > & , Args... > равно true .

void конструкторы частичной специализации

14) Этот конструктор объявлен как удалённый, если только std:: is_copy_constructible_v < E > не является true .
Этот конструктор является тривиальным, если std:: is_trivially_copy_constructible_v < E > равно true .
15) Эта перегрузка участвует в разрешении перегрузки только если std:: is_move_constructible_v < E > равно true .
Этот конструктор является тривиальным, если std:: is_trivially_move_constructible_v < E > равно true .
16,17) Эти перегрузки участвуют в разрешении перегрузки только при выполнении всех следующих условий:
18) Эта перегрузка участвует в разрешении перегрузки только если std:: is_constructible_v < E, const G & > равно true .
19) Эта перегрузка участвует в разрешении перегрузки только если std:: is_constructible_v < E, G > равно true .
21) Эта перегрузка участвует в разрешении перегрузки только если std:: is_constructible_v < E, Args... > равно true .
22) Эта перегрузка участвует в разрешении перегрузки только если std:: is_constructible_v < E, std:: initializer_list < U > & , Args... > равно true .

Исключения

Конструкторы первичного шаблона

1) Выбрасывает любое исключение, вызванное инициализацией ожидаемого значения.
2) Выбрасывает любое исключение, вызванное инициализацией ожидаемого или неожиданного значения.
3) Выбрасывает любое исключение, вызванное инициализацией ожидаемого или неожиданного значения.
4,5) Выбрасывает любое исключение, выброшенное при инициализации ожидаемого или неожиданного значения.
6) Выбрасывает любое исключение, вызванное инициализацией ожидаемого значения.
7,8) Выбрасывает любое исключение, вызванное инициализацией неожиданного значения.
9,10) Выбрасывает любое исключение, выброшенное при инициализации ожидаемого значения.
11,12) Выбрасывает любое исключение, вызванное инициализацией неожиданного значения.

void конструкторы частичной специализации

14-19) Выбрасывает любое исключение, вызванное инициализацией неожиданного значения.
21,22) Выбрасывает любое исключение, вызванное инициализацией неожиданного значения.

Пример

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применяется к Поведение в опубликованной версии Корректное поведение
LWG 3886 C++23 аргумент шаблона по умолчанию для перегрузки ( 6 ) был T изменён на std:: remove_cv_t < T >

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

(C++23)
представлен как неожиданное значение
(шаблон класса)
тег для конструирования на месте
(тег)
тег для конструирования на месте неожиданного значения в expected
(тег)