Namespaces
Variants

std::experimental::optional<T>:: operator=

From cppreference.net
optional & operator = ( std:: experimental :: nullopt_t ) noexcept ;
(1) (TS библиотечных основ)
optional & operator = ( const optional & other ) ;
(2) (TS библиотечных основ)
optional & operator = ( optional && other ) noexcept ( /* см. ниже */ ) ;
(3) (TS библиотечных основ)
template < class U >
optional & operator = ( U && value ) ;
(4) (TS библиотечных основ)

Заменяет содержимое * this содержимым other .

1) Если * this содержит значение до вызова, содержащееся значение уничтожается путем вызова его деструктора, как если бы с помощью val - > T :: ~T ( ) . * this не содержит значения после этого вызова.
2,3) Присваивает состояние объекта other .
  • Если ни * this , ни other не содержат значения, функция не имеет эффекта.
  • Если * this содержит значение, а other — нет, то содержащееся значение уничтожается вызовом его деструктора. * this не содержит значения после вызова.
  • Если other содержит значение, то в зависимости от того, содержит ли * this значение, содержащееся значение либо прямо инициализируется , либо присваивается из * other (2) или std :: move ( * other ) (3) . Примечание: optional, из которого было перемещено значение, всё ещё содержит значение .
4) Присваивание с полной пересылкой только для decay-типов: в зависимости от того, содержит ли * this значение до вызова, содержащееся значение либо прямо инициализируется из std:: forward < U > ( value ) либо присваивается из std:: forward < U > ( value ) . Функция не участвует в разрешении перегрузки, если std:: is_same < std:: decay_t < U > , T > :: value не равно true .

Содержание

Параметры

other - другой optional объект, чьё содержащееся значение присваивается
value - значение для присваивания содержащемуся значению
Требования к типам
-
T должен удовлетворять требованиям CopyAssignable и CopyConstructible для использования перегрузки (2).
-
T должен удовлетворять требованиям MoveAssignable и MoveConstructible для использования перегрузки (3).

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

* this

Исключения

2-4) Выбрасывает любое исключение, выброшенное конструктором или оператором присваивания T . Если исключение выброшено, состояние инициализации * this other в случае (2)) остается неизменным, т.е. если объект содержал значение, он продолжает содержать значение, и наоборот. Содержимое value и содержащиеся значения * this и other зависят от гарантий безопасности исключений операции, из которой возникло исключение (конструктор копирования, перемещающее присваивание и т.д.).
(3) имеет следующую noexcept декларацию:
noexcept спецификация:

Примечания

Необязательный объект op может быть преобразован в пустой optional с помощью как op = { } ; , так и op = nullopt ; .

Пример

#include <experimental/optional>
#include <iostream>
int main()
{
    std::experimental::optional<const char*> s1 = "abc", s2; // конструктор
    s2 = s1; // присваивание
    s1 = "def"; // decaying assignment (U = char[4], T = const char*)
    std::cout << *s2 << ' ' << *s1 << '\n';
}

Вывод:

abc def

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

создает содержащееся значение на месте
(публичная функция-член)