std::experimental::optional<T>:: operator=
From ru.cppreference.net
<
cpp
|
experimental
|
optional
|
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)
Выбрасывает любое исключение, выброшенное конструктором или оператором присваивания
(3) имеет следующую
T
. Если исключение выброшено, состояние инициализации
*
this
(и
other
в случае (2)) остается неизменным, т.е. если объект содержал значение, он продолжает содержать значение, и наоборот. Содержимое
value
и содержащиеся значения
*
this
и
other
зависят от гарантий безопасности исключений операции, из которой возникло исключение (конструктор копирования, перемещающее присваивание и т.д.).
(3) имеет следующую
noexcept
декларацию:
noexcept
спецификация:
noexcept
(
std::
is_nothrow_move_assignable
<
T
>
::
value
&&
std::
is_nothrow_move_constructible
<
T
>
::
value
)
Примечания
Необязательный объект
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
Смотрите также
|
создает содержащееся значение на месте
(публичная функция-член) |