선택적 클래스
클래스 템플릿 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&&) &&;