std::experimental::optional<T>:: operator=
|
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 .
- Если ни * this , ни other не содержат значения, функция не имеет эффекта.
- Если * this содержит значение, а other — нет, то содержащееся значение уничтожается вызовом его деструктора. * this не содержит значения после вызова.
- Если other содержит значение, то в зависимости от того, содержит ли * this значение, содержащееся значение либо прямо инициализируется , либо присваивается из * other (2) или std :: move ( * other ) (3) . Примечание: optional, из которого было перемещено значение, всё ещё содержит значение .
Содержание |
Параметры
| other | - |
другой
optional
объект, чьё содержащееся значение присваивается
|
| value | - | значение для присваивания содержащемуся значению |
| Требования к типам | ||
-
T
должен удовлетворять требованиям
CopyAssignable
и
CopyConstructible
для использования перегрузки (2).
|
||
-
T
должен удовлетворять требованиям
MoveAssignable
и
MoveConstructible
для использования перегрузки (3).
|
||
Возвращаемое значение
* this
Исключения
T
. Если исключение выброшено, состояние инициализации
*
this
(и
other
в случае (2)) остается неизменным, т.е. если объект содержал значение, он продолжает содержать значение, и наоборот. Содержимое
value
и содержащиеся значения
*
this
и
other
зависят от гарантий безопасности исключений операции, из которой возникло исключение (конструктор копирования, перемещающее присваивание и т.д.).
(3) имеет следующую
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
Смотрите также
|
создает содержащееся значение на месте
(публичная функция-член) |