std::experimental::optional<T>:: operator=
From 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
(
/* see below */
)
;
|
(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 가 값을 포함하는지 여부에 따라 포함된 값은 직접 초기화(direct-initialized) 되거나 * other (2) 또는 std :: move ( * other ) (3) 로부터 할당됩니다. 이동된 optional은 여전히 값을 포함합니다 .
4)
붕괴-전용 완벽 전달 할당: 호출 전에
*
this
가 값을 포함하는지 여부에 따라, 포함된 값은
std::
forward
<
U
>
(
value
)
로부터 직접 초기화되거나
std::
forward
<
U
>
(
value
)
로부터 할당됩니다. 이 함수는
std::
is_same
<
std::
decay_t
<
U
>
, T
>
::
value
가
true
인 경우에만 오버로드 해결에 참여합니다.
목차 |
매개변수
| other | - |
포함된 값을 할당할 다른
optional
객체
|
| value | - | 포함된 값에 할당할 값 |
| 타입 요구사항 | ||
-
T
는 오버로드 (2)를 사용하기 위해
CopyAssignable
및
CopyConstructible
요구사항을 충족해야 함
|
||
-
T
는 오버로드 (3)를 사용하기 위해
MoveAssignable
및
MoveConstructible
요구사항을 충족해야 함
|
||
반환값
* this
예외
2-4)
(3) 은 다음과 같은
T
의 생성자나 할당 연산자에 의해 발생하는 모든 예외를 발생시킵니다. 예외가 발생하면,
*
this
의 초기화 상태(그리고 (2)의 경우
other
의 상태)는 변경되지 않습니다. 즉, 객체가 값을 포함하고 있었다면 여전히 값을 포함하며, 그 반대의 경우도 마찬가지입니다.
value
의 내용과
*
this
및
other
의 포함된 값들은 예외가 발생한 연산(복사 생성자, 이동 할당 등)의 예외 안전성 보장에 따라 달라집니다.
(3) 은 다음과 같은
noexcept
선언을 가집니다:
noexcept
specification:
noexcept
(
std::
is_nothrow_move_assignable
<
T
>
::
value
&&
std::
is_nothrow_move_constructible
<
T
>
::
value
)
참고 사항
선택적 객체
op
는 다음 두 가지 방법으로 빈 선택적 객체로 전환될 수 있습니다:
op
=
{
}
;
와
op
=
nullopt
;
.
예제
이 코드 실행
#include <experimental/optional> #include <iostream> int main() { std::experimental::optional<const char*> s1 = "abc", s2; // constructor s2 = s1; // assignment s1 = "def"; // decaying assignment (U = char[4], T = const char*) std::cout << *s2 << ' ' << *s1 << '\n'; }
출력:
abc def
참고 항목
|
포함된 값을 제자리에서 생성합니다
(public member function) |