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 ( /* 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) T 의 생성자나 할당 연산자에 의해 발생하는 모든 예외를 발생시킵니다. 예외가 발생하면, * this 의 초기화 상태(그리고 (2)의 경우 other 의 상태)는 변경되지 않습니다. 즉, 객체가 값을 포함하고 있었다면 여전히 값을 포함하며, 그 반대의 경우도 마찬가지입니다. value 의 내용과 * this other 의 포함된 값들은 예외가 발생한 연산(복사 생성자, 이동 할당 등)의 예외 안전성 보장에 따라 달라집니다.
(3) 은 다음과 같은 noexcept 선언을 가집니다:
noexcept specification:

참고 사항

선택적 객체 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)