operator==, !=, <, <=, >, >=, <=>(std::optional)
cppreference.net에서 가져옴
| 헤더 <optional>
|
||
| 에 정의됨 optional두 개의 |
||
template< class T, class U >
constexpr bool operator==( const optional<T>& lhs, const optional<U>& rhs );
|
객체 비교 | (1) |
template< class T, class U >
constexpr bool operator!=( const optional<T>& lhs, const optional<U>& rhs );
|
(C++17부터) | (2) |
template< class T, class U >
constexpr bool operator<( const optional<T>& lhs, const optional<U>& rhs );
|
(C++17부터) | (3) |
template< class T, class U >
constexpr bool operator<=( const optional<T>& lhs, const optional<U>& rhs );
|
(C++17부터) | (4) |
template< class T, class U >
constexpr bool operator>( const optional<T>& lhs, const optional<U>& rhs );
|
(C++17부터) | (5) |
template< class T, class U >
constexpr bool operator>=( const optional<T>& lhs, const optional<U>& rhs );
|
(C++17부터) | (6) |
template< class T, std::three_way_comparable_with<T> U >
constexpr std::compare_three_way_result_t<T, U>
operator<=>( const optional<T>& lhs, const optional<U>& rhs );
|
(C++17부터) | (7) |
| (C++20부터) optionalnullopt |
||
template< class T >
constexpr bool operator==( const optional<T>& opt, std::nullopt_t ) noexcept;
|
와 | 객체 비교 |
template< class T >
constexpr bool operator==( std::nullopt_t, const optional<T>& opt ) noexcept;
|
(8) | (C++17부터) (C++20까지) |
template< class T >
constexpr bool operator!=( const optional<T>& opt, std::nullopt_t ) noexcept;
|
(9) | (C++17부터) (C++20까지) |
template< class T >
constexpr bool operator!=( std::nullopt_t, const optional<T>& opt ) noexcept;
|
(10) | (C++17부터) (C++20까지) |
template< class T >
constexpr bool operator<( const optional<T>& opt, std::nullopt_t ) noexcept;
|
(11) | (C++17부터) (C++20까지) |
template< class T >
constexpr bool operator<( std::nullopt_t, const optional<T>& opt ) noexcept;
|
(12) | (C++17부터) (C++20까지) |
template< class T >
constexpr bool operator<=( const optional<T>& opt, std::nullopt_t ) noexcept;
|
(13) | (C++17부터) (C++20까지) |
template< class T >
constexpr bool operator<=( std::nullopt_t, const optional<T>& opt ) noexcept;
|
(14) | (C++17부터) (C++20까지) |
template< class T >
constexpr bool operator>( const optional<T>& opt, std::nullopt_t ) noexcept;
|
(15) | (C++17부터) (C++20까지) |
template< class T >
constexpr bool operator>( std::nullopt_t, const optional<T>& opt ) noexcept;
|
(16) | (C++17부터) (C++20까지) |
template< class T >
constexpr bool operator>=( const optional<T>& opt, std::nullopt_t ) noexcept;
|
(17) | (C++17부터) (C++20까지) |
template< class T >
constexpr bool operator>=( std::nullopt_t, const optional<T>& opt ) noexcept;
|
(18) | (C++17부터) (C++20까지) |
template< class T >
constexpr std::strong_ordering
operator<=>( const optional<T>& opt, std::nullopt_t ) noexcept;
|
(19) | (C++20부터) |
optional 객체를 값과 비교 |
||
template< class T, class U >
constexpr bool operator==( const optional<T>& opt, const U& value );
|
(21) | (C++17부터) |
template< class U, class T >
constexpr bool operator==( const U& value, const optional<T>& opt );
|
(22) | (C++17부터) |
template< class T, class U >
constexpr bool operator!=( const optional<T>& opt, const U& value );
|
(23) | (C++17부터) |
template< class U, class T >
constexpr bool operator!=( const U& value, const optional<T>& opt );
|
(24) | (C++17부터) |
template< class T, class U >
constexpr bool operator<( const optional<T>& opt, const U& value );
|
(25) | (C++17부터) |
template< class U, class T >
constexpr bool operator<( const U& value, const optional<T>& opt );
|
(26) | (C++17부터) |
template< class T, class U >
constexpr bool operator<=( const optional<T>& opt, const U& value );
|
(27) | (C++17부터) |
template< class U, class T >
constexpr bool operator<=( const U& value, const optional<T>& opt );
|
(28) | (C++17부터) |
template< class T, class U >
constexpr bool operator>( const optional<T>& opt, const U& value );
|
(29) | (C++17부터) |
template< class U, class T >
constexpr bool operator>( const U& value, const optional<T>& opt );
|
(30) | (C++17부터) |
template< class T, class U >
constexpr bool operator>=( const optional<T>& opt, const U& value );
|
(31) | (C++17부터) |
template< class U, class T >
constexpr bool operator>=( const U& value, const optional<T>& opt );
|
(32) | (C++17부터) |
template< class T, std::three_way_comparable_with<T> U >
constexpr std::compare_three_way_result_t<T, U>
operator<=>( const optional<T>& opt, const U& value );
|
(33) | (C++20부터) |
optional 객체에 대한 비교 연산을 수행합니다.
1-7) 두 개의
optional 객체, lhs와 rhs를 비교합니다. T과 lhs 둘 다 값을 포함하는 경우에만 포함된 값을 비교합니다(해당 rhs의 연산자 사용). 그렇지 않으면
lhs는rhs와lhs둘 다 값을 포함하지 않는 경우에만 같음rhs으로 간주됩니다.lhs는rhs가 값을 포함하고rhs가 값을 포함하지 않는 경우에만 작음lhs으로 간주됩니다.
1-6)
@이 해당 비교 연산자를 나타낸다고 할 때, 각 함수에 대해:
|
해당 표현식 |
(C++26까지) |
|
이 오버로드는 해당 표현식 |
(C++26부터) |
8-20)
opt를 nullopt과 비교합니다. 값을 포함하지 않는 와 비교할 때는 (1-6)와 동일합니다.
optional|
, |
(C++20부터) |
21-33)
opt를 value과 비교합니다. T가 값을 포함하는 경우에만 값을 비교합니다(해당 opt의 연산자 사용). 그렇지 않으면 opt는 보다 작음 value으로 간주됩니다.
21-32)
@이 해당 비교 연산자를 나타낸다고 할 때, 각 함수에 대해:
|
해당 표현식 |
(C++26까지) |
|
이 오버로드는 다음 모든 조건이 충족되는 경우에만 오버로드 해결에 참여합니다:
|
(C++26부터) |
매개변수
| lhs, rhs, opt | - |
비교할
optional
객체
|
| value | - | 포함된 값과 비교할 값 |
반환값
1)
lhs.
has_value
(
)
!
=
rhs.
has_value
(
)
?
false
:
( lhs. has_value ( ) == false ? true : * lhs == * rhs )
( lhs. has_value ( ) == false ? true : * lhs == * rhs )
2)
lhs.
has_value
(
)
!
=
rhs.
has_value
(
)
?
true
:
( lhs. has_value ( ) == false ? false : * lhs ! = * rhs )
( lhs. has_value ( ) == false ? false : * lhs ! = * rhs )
3)
!
rhs
?
false
:
(
!
lhs
?
true
:
*
lhs
<
*
rhs
)
4)
!
lhs
?
true
:
(
!
rhs
?
false
:
*
lhs
<=
*
rhs
)
5)
!
lhs
?
false
:
(
!
rhs
?
true
:
*
lhs
>
*
rhs
)
6)
!
rhs
?
true
:
(
!
lhs
?
false
:
*
lhs
>=
*
rhs
)
7)
lhs
&&
rhs
?
*
lhs
<=>
*
rhs
:
lhs.
has_value
(
)
<=>
rhs.
has_value
(
)
8,9)
!
opt
10,11)
opt.
has_value
(
)
12)
false
13)
opt.
has_value
(
)
14)
!
opt
15)
true
16)
opt.
has_value
(
)
17)
false
18)
true
19)
!
opt
20)
opt.
has_value
(
)
<=>
false
21)
opt.
has_value
(
)
?
*
opt
==
value
:
false
22)
opt.
has_value
(
)
?
value
==
*
opt
:
false
23)
opt.
has_value
(
)
?
*
opt
!
=
value
:
true
24)
opt.
has_value
(
)
?
value
!
=
*
opt
:
true
25)
opt.
has_value
(
)
?
*
opt
<
value
:
true
26)
opt.
has_value
(
)
?
value
<
*
opt
:
false
27)
opt.
has_value
(
)
?
*
opt
<=
value
:
true
28)
opt.
has_value
(
)
?
value
<=
*
opt
:
false
29)
opt.
has_value
(
)
?
*
opt
>
value
:
false
30)
opt.
has_value
(
)
?
value
>
*
opt
:
true
31)
opt.
has_value
(
)
?
*
opt
>=
value
:
false
32)
opt.
has_value
(
)
?
value
>=
*
opt
:
true
33)
opt.
has_value
(
)
?
*
opt
<=>
value
:
std
::
strong_ordering
::
less
예외
1-7)
구현 정의 예외를 발생시킬 수 있습니다.
21-33)
비교가 예외를 발생시킬 때와 무엇을 발생시키는지 설명합니다.
참고 사항
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_constrained_equality
|
202403L
|
(C++26) | 제약된 비교 연산자 for std::optional |
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 2945 | C++17 | T-비교 케이스에서 템플릿 매개변수 순서가 일관되지 않음 | 일관성 있게 수정됨 |