Namespaces
Variants

std::experimental::optional<T>:: optional

From cppreference.net
constexpr optional ( ) noexcept ;
constexpr optional ( std:: experimental :: nullopt_t ) noexcept ;
(1) (библиотека fundamentals TS)
optional ( const optional & other ) ;
(2) (библиотека fundamentals TS)
optional ( optional && other ) noexcept ( /* см. ниже */ ) ;
(3) (библиотека fundamentals TS)
constexpr optional ( const T & value ) ;
(4) (библиотека fundamentals TS)
constexpr optional ( T && value ) ;
(5) (библиотека fundamentals TS)
template < class ... Args >
constexpr explicit optional ( std:: experimental :: in_place_t , Args && ... args ) ;
(6) (библиотека fundamentals TS)
template < class U, class ... Args >

constexpr explicit optional ( std:: experimental :: in_place_t ,
std:: initializer_list < U > ilist,

Args && ... args ) ;
(7) (библиотека fundamentals TS)

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

1) Создает объект, который не содержит значения .
2) Конструктор копирования: Если other содержит значение, инициализирует содержащееся значение как при прямой инициализации (но не прямой списочной инициализации) объекта типа T с выражением * other . Если other не содержит значения, конструирует объект, который не содержит значения .
3) Конструктор перемещения: Если other содержит значение, инициализирует содержащееся значение как при прямой инициализации (но не прямой списочной инициализации) объекта типа T с выражением std :: move ( * other ) и не делает other пустым: перемещённый optional всё ещё содержит значение , но само значение перемещено. Если other не содержит значения, конструирует объект, который не содержит значения .
4) Создает объект optional, который содержит значение , инициализированное как при прямой инициализации (но не прямой списочной инициализации) объекта типа T с выражением value . Этот конструктор является constexpr , если конструктор T , выбранный для прямой инициализации, является constexpr .
5) Создает объект optional, который содержит значение , инициализированное как при прямой инициализации (но не прямой списочной инициализации) объекта типа T с выражением std :: move ( value ) . Этот конструктор является constexpr , если конструктор T , выбранный при прямой инициализации, является constexpr .
6) Создает объект optional, который содержит значение , инициализированное как при прямой инициализации (но не прямой списочной инициализации) объекта типа T из аргументов std:: forward < Args > ( args ) ... .
7) Создает объект optional, который содержит значение , инициализированное как при прямой инициализации (но не прямой инициализации списком) объекта типа T из аргументов ilist, std:: forward < Args > ( args ) ... . Функция не участвует в разрешении перегрузки, если std:: is_constructible < T, std:: initializer_list < U > & , Args && ... > :: value ! = true .

Содержание

Параметры

other - другой optional объект, значение которого копируется
value - значение для инициализации содержащегося значения
args... - аргументы для инициализации содержащегося значения
ilist - список инициализации для инициализации содержащегося значения
Требования к типам
-
T должен удовлетворять требованиям CopyConstructible для использования перегрузок (2,4).
-
T должен удовлетворять требованиям MoveConstructible для использования перегрузок (3,5).

Исключения

2) Выбрасывает любое исключение, выброшенное конструктором T .
3) Выбрасывает любое исключение, выброшенное конструктором T . Имеет следующую noexcept спецификацию:
noexcept спецификация:
noexcept ( std:: is_nothrow_move_constructible < T > :: value )
4-7) Выбрасывает любое исключение, выброшенное конструктором T .

Пример

#include <experimental/optional>
#include <iostream>
#include <string>
int main()
{
    std::experimental::optional<int> o1,      // пустой
                                     o2 = 1,  // инициализация из rvalue
                                     o3 = o2; // конструктор копирования
    std::experimental::optional<std::string> o4(std::experimental::in_place,
                                                {'a', 'b', 'c'});
    std::cout << *o2 << ' ' << *o3 << ' ' << *o4 << '\n';
}

Вывод:

1 1 abc

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

создает объект optional
(шаблон функции)