operator==, !=, <, <=, >, >=, <=> (std::optional)
|
헤더에 정의됨
<optional>
|
||
|
두 개의
optional
객체 비교
|
||
|
template
<
class
T,
class
U
>
constexpr bool operator == ( const optional < T > & lhs, const optional < U > & rhs ) ; |
(1) | (C++17부터) |
|
template
<
class
T,
class
U
>
constexpr bool operator ! = ( const optional < T > & lhs, const optional < U > & rhs ) ; |
(2) | (C++17부터) |
|
template
<
class
T,
class
U
>
constexpr bool operator < ( const optional < T > & lhs, const optional < U > & rhs ) ; |
(3) | (C++17부터) |
|
template
<
class
T,
class
U
>
constexpr bool operator <= ( const optional < T > & lhs, const optional < U > & rhs ) ; |
(4) | (C++17부터) |
|
template
<
class
T,
class
U
>
constexpr bool operator > ( const optional < T > & lhs, const optional < U > & rhs ) ; |
(5) | (C++17부터) |
|
template
<
class
T,
class
U
>
constexpr bool operator >= ( const optional < T > & lhs, const optional < U > & rhs ) ; |
(6) | (C++17부터) |
|
template
<
class
T,
std::
three_way_comparable_with
<
T
>
U
>
constexpr
std::
compare_three_way_result_t
<
T, U
>
|
(7) | (C++20 이후) |
optional
객체와
nullopt
를 비교합니다
|
||
|
template
<
class
T
>
constexpr bool operator == ( const optional < T > & opt, std:: nullopt_t ) noexcept ; |
(8) | (C++17 이후) |
|
template
<
class
T
>
constexpr bool operator == ( std:: nullopt_t , const optional < T > & opt ) noexcept ; |
(9) |
(C++17부터)
(C++20 이전까지) |
|
template
<
class
T
>
constexpr bool operator ! = ( const optional < T > & opt, std:: nullopt_t ) noexcept ; |
(10) |
(C++17부터)
(C++20까지) |
|
template
<
class
T
>
constexpr bool operator ! = ( std:: nullopt_t , const optional < T > & opt ) noexcept ; |
(11) |
(C++17부터)
(C++20까지) |
|
template
<
class
T
>
constexpr bool operator < ( const optional < T > & opt, std:: nullopt_t ) noexcept ; |
(12) |
(C++17부터)
(C++20까지) |
|
template
<
class
T
>
constexpr bool operator < ( std:: nullopt_t , const optional < T > & opt ) noexcept ; |
(13) |
(C++17부터)
(C++20 이전까지) |
|
template
<
class
T
>
constexpr bool operator <= ( const optional < T > & opt, std:: nullopt_t ) noexcept ; |
(14) |
(C++17부터)
(C++20까지) |
|
template
<
class
T
>
constexpr bool operator <= ( std:: nullopt_t , const optional < T > & opt ) noexcept ; |
(15) |
(C++17부터)
(C++20까지) |
|
template
<
class
T
>
constexpr bool operator > ( const optional < T > & opt, std:: nullopt_t ) noexcept ; |
(16) |
(C++17부터)
(C++20까지) |
|
template
<
class
T
>
constexpr bool operator > ( std:: nullopt_t , const optional < T > & opt ) noexcept ; |
(17) |
(C++17부터)
(C++20 이전까지) |
|
template
<
class
T
>
constexpr bool operator >= ( const optional < T > & opt, std:: nullopt_t ) noexcept ; |
(18) |
(C++17부터)
(C++20까지) |
|
template
<
class
T
>
constexpr bool operator >= ( std:: nullopt_t , const optional < T > & opt ) noexcept ; |
(19) |
(C++17부터)
(C++20 이전까지) |
|
template
<
class
T
>
constexpr
std::
strong_ordering
|
(20) | (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
>
|
(33) | (C++20 이후) |
optional
객체에 대한 비교 연산을 수행합니다.
optional
객체,
lhs
와
rhs
를 비교합니다. 포함된 값은
lhs
와
rhs
모두 값이 포함된 경우에만 비교됩니다(
T
의 해당 연산자 사용). 그렇지 않은 경우,
- lhs 는 lhs 와 rhs 모두 값이 포함되지 않은 경우에만 rhs 와 같음 으로 간주됩니다.
- lhs 는 rhs 가 값을 포함하고 lhs 가 값을 포함하지 않는 경우에만 rhs 보다 작음 으로 간주됩니다.
|
해당 표현식 * lhs @ * rhs 이 잘못된 형식이거나 그 결과가 bool 로 변환 가능하지 않으면, 프로그램은 잘못된 형식입니다. |
(C++26까지) |
|
이 오버로드는 해당 표현식 * lhs @ * rhs 이 올바른 형식이고 그 결과가 bool 로 변환 가능할 때만 오버로드 해결에 참여합니다. |
(C++26부터) |
nullopt
와 비교합니다. 값을 포함하지 않는
optional
과 비교할 때
(1-6)
과 동등합니다.
|
|
(since C++20) |
T
의 해당 연산자를 사용하여) 비교됩니다. 그렇지 않은 경우,
opt
는
value
보다
작은
것으로 간주됩니다.
|
해당 표현식 * opt @ value 또는 value @ * opt (피연산자들의 위치에 따라)이 형성되지 않거나 그 결과가 bool 로 변환 가능하지 않으면, 프로그램은 형성되지 않는다. |
(C++26까지) |
|
이 오버로드는 다음 모든 조건이 만족될 때만 오버로드 해결에 참여한다:
|
(C++26부터) |
목차 |
매개변수
| lhs, rhs, opt | - |
비교할
optional
객체
|
| value | - | 포함된 값과 비교할 값 |
반환값
( lhs. has_value ( ) == false ? true : * lhs == * rhs )
( lhs. has_value ( ) == false ? false : * lhs ! = * rhs )
예외
참고 사항
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_constrained_equality
|
202403L
|
(C++26) | 제약된 비교 연산자 for std::optional |
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 2945 | C++17 | T-비교 케이스에서 템플릿 매개변수 순서가 일관되지 않음 | 일관성 있게 수정됨 |