다음을 통해 공유


선택적 클래스

클래스 템플릿 optional<T> 은 포함된 값이라고 하는 형식T의 값을 포함하거나 포함하지 않을 수 있는 개체를 설명합니다.

인스턴스에 optional<T> 값이 포함된 경우 포함된 값은 개체의 optional 스토리지 내에서 형식 T에 적합하게 정렬된 영역에 할당됩니다. optional<T> 변환bool될 때 결과는 개체에 값이 포함된 경우이고true, 그렇지 않으면 해당 값입니다false.

포함된 개체 형식 T 은 안 되거나 in_place_t nullopt_t. T소멸할 수 있어야 합니다. 즉, 소멸자는 모든 소유 리소스를 회수해야 하며 예외를 throw하지 않을 수 있습니다.

클래스는 optional C++17의 새로운 클래스입니다.

구문

template <class T>
class optional
{
    using value_type = T;
};

template<class T> optional(T) -> optional<T>;

멤버

생성자

속성 설명
생성자 및 소멸자
optional optional 형식의 개체를 생성합니다.
~선택적 형식 optional의 개체를 삭제합니다.
양도
operator= 다른 복사본 optional 으로 optional바꿉니다.
emplace 지정된 인수를 사용하여 포함된 값을 초기화합니다.
Swap
swap 포함된 값 또는 빈 상태를 다른 optional값으로 바꿉니다.
관찰자
has_value 개체에 값이 optional 포함되어 있는지 여부를 반환합니다.
value 포함된 값을 반환합니다.
value_or 포함된 값을 반환하거나 값이 없으면 대체 값을 반환합니다.
operator-> 개체의 포함된 값을 optional 참조합니다.
operator* 개체의 포함된 값을 optional 참조합니다.
operator bool 개체에 값이 optional 포함되어 있는지 여부를 반환합니다.
한정자
reset optional 포함된 값을 모두 삭제하여 다시 설정합니다.

has_value

constexpr bool has_value() const noexcept;

선택적 생성자

optional 형식의 개체를 생성합니다.

constexpr optional() noexcept;
constexpr optional(nullopt_t nullopt) noexcept;
constexpr optional(const optional& rhs);
constexpr optional(optional&& rhs) noexcept;

template <class... Args>
constexpr explicit optional(in_place_t, Args&&... args);

template <class U, class... Args>
constexpr explicit optional(in_place_t, initializer_list<U> i_list, Args&&... args);

template <class U = T>
explicit constexpr optional(U&& rhs);

template <class U>
explicit optional(const optional<U>& rhs);

template <class U>
explicit optional(optional<U>&& rhs);

매개 변수

rhs
optional 포함된 값을 복사하거나 이동할 구문입니다.

i_list
포함된 값을 생성할 이니셜라이저 목록입니다.

args
포함된 값을 생성할 인수 목록입니다.

설명

constexpr optional() noexcept;constexpr optional(nullopt_t nullopt) noexcept; 이러한 생성자는 값을 포함하지 않는 생성자를 생성 optional 합니다.

constexpr optional(const optional& rhs); 복사 생성자는 인수의 포함된 값에서 포함된 값을 초기화합니다. true가 아니면 is_copy_constructible_v<T> 삭제된 것으로 정의되며, true이면 is_trivially_copy_constructible_v<T> 사소합니다.

constexpr optional(optional&& rhs) noexcept; 이동 생성자는 인수의 포함된 값에서 이동하여 포함된 값을 초기화합니다. true가 아니면 is_move_constructible_v<T> 오버로드 확인에 참여하지 않으며, true인 경우 is_trivially_move_constructible_v<T> 사소한 것입니다.

template <class... Args> constexpr explicit optional(in_place_t, Args&&... args); 직접은 인수 std::forward<Args>(args)를 사용하는 것처럼 포함된 값을 초기화합니다. 이 생성자는 constexpr 사용된 생성자가 .인 T 경우입니다 constexpr. true가 아니면 오버로드 확인 is_constructible_v<T, Args...> 에 참여하지 않습니다.

template <class U, class... Args> constexpr explicit optional(in_place_t, initializer_list<U> i_list, Args&&... args); 직접은 인수 i_list, std::forward<Args>(args)를 사용하는 것처럼 포함된 값을 초기화합니다. 이 생성자는 constexpr 사용된 생성자가 .인 T 경우입니다 constexpr. true가 아니면 오버로드 확인 is_constructible_v<T, initializer_list<U>&, Args&&...> 에 참여하지 않습니다.

template <class U = T> explicit constexpr optional(U&& rhs); 직접은 포함된 값을 사용하는 std::forward<U>(v)것처럼 초기화합니다. 이 생성자는 constexpr 사용된 생성자가 .인 T 경우입니다 constexpr. true이고 is_same_v<remove_cvref_t<U>, in_place_t> is_same_v<remove_cvref_t<U>, optional> false가 아니면 is_constructible_v<T, U&&> 오버로드 확인에 참여하지 않습니다.

template <class U> explicit optional(const optional<U>& rhs);rhs에 값이 포함된 경우 인수의 포함된 값에서 포함된 값을 직접 초기화합니다. true가 아니면 is_constructible_v<T, const U&> 오버로드 확인에 참여하지 않으며 , is_constructible_v<T, optional<U>&>, is_constructible_v<T, const optional<U>&>is_constructible_v<T, optional<U>&&>, is_constructible_v<T, const optional<U>&&>, is_convertible_v<optional<U>&, T>, , is_convertible_v<optional<U>&&, T>is_convertible_v<const optional<U>&, T>is_convertible_v<const optional<U>&&, T> 모두 false입니다.

template <class U> explicit optional(optional<U>&& rhs);rhs에 값이 포함된 경우 포함된 값을 사용하는 std::move(*rhs)것처럼 직접 초기화합니다. true가 아니면 is_constructible_v<T, U&&> 오버로드 확인에 참여하지 않으며 , is_constructible_v<T, optional<U>&>, is_constructible_v<T, const optional<U>&>is_constructible_v<T, optional<U>&&>, is_constructible_v<T, const optional<U>&&>, is_convertible_v<optional<U>&, T>, , is_convertible_v<optional<U>&&, T>is_convertible_v<const optional<U>&, T>is_convertible_v<const optional<U>&&, T> 모두 false입니다.

~선택적 소멸자

포함된 값이 있으면 삭제합니다.

~optional();

설명

사소하게 소멸할 수 있는 optional<T> 경우 T 사소하게 소멸할 수도 있습니다.

operator=

포함된 값을 optional 복사본으로 바꾸거나 포함된 다른 optional 값에서 이동합니다.

optional& operator=(nullopt_t) noexcept;
optional& operator=(const optional& rhs);
optional& operator=(optional&&) noexcept( /* see below */ );

template <class U = T>
    optional& operator=(U&&);

template <class U>
optional& operator=(const optional<U>&);

template <class U>
    optional& operator=(optional<U>&&);

template <class... Args>
T& emplace(Args&&...);

template <class U, class... Args>
T& emplace(initializer_list<U>, Args&&...);

연산자->

개체의 포함된 값을 역참조합니다 optional .

constexpr const T* operator->() const;
constexpr T* operator->();

operator*

개체의 포함된 값을 역참조합니다 optional .

constexpr const T& operator*() const&;
constexpr T& operator*() &;
constexpr T&& operator*() &&;
constexpr const T&& operator*() const&&;

operator bool

개체에 optional 포함된 값이 있는지 여부를 보고합니다.

constexpr explicit operator bool() const noexcept;

reset

실제로 포함된 개체의 소멸자(있는 경우)를 호출하고 초기화되지 않은 상태로 설정합니다.

void reset() noexcept;

swap

template<class T>
void swap(optional<T>&, optional<T>&) noexcept;

value

constexpr const T& value() const&;
constexpr T& value() &;
constexpr T&& value() &&;
constexpr const T&& value() const&&;

value_or

template <class U>
    constexpr T value_or(U&&) const&;
template <class U>
    constexpr T value_or(U&&) &&;

참고 항목

<optional>