Namespaces
Variants

std::strong_order

cppreference.net에서 가져옴
 
 
유틸리티 라이브러리
일반 유틸리티
관계 연산자 (C++20에서 폐기됨)
정수 비교 함수
(C++20)(C++20)(C++20)    
(C++20)
Swap 및 타입 연산
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
공통 어휘 타입
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
헤더 <compare>
inline namespace /* unspecified */ {
    inline constexpr /* unspecified */ strong_order = /* unspecified */;
}
에 정의됨 (C++20부터)
호출 시그니처
template< class T, class U >
    requires /* see below */
constexpr std::strong_ordering strong_order( T&& t, U&& u ) noexcept(/* see below */);

3방향 비교를 사용하여 두 값을 비교하고 std::strong_ordering 타입의 결과를 생성합니다.

t와 u를 표현식으로 하고 T과 U가 각각 decltype((t))와 decltype((u))을 나타낼 때, std::strong_order(t, u)은 표현식-동등합니다:

  • std::is_same_v<std::decay_t<T>, std::decay_t<U>>이 true인 경우:
    • std::strong_ordering(strong_order(t, u)), std::strong_order의 선언을 포함하지 않는 문맥에서 오버로드 해석이 수행될 때 올바른 형식의 표현식인 경우,
    • 그렇지 않고, T이 부동 소수점 타입인 경우:
      • std::numeric_limits<T>::is_iec559이 true이면, ISO/IEC/IEEE 60559 totalOrder 부동 소수점 값 비교를 수행하고 그 결과를 std::strong_ordering 타입의 값으로 반환합니다 (참고: 이 비교는 양의 0과 음의 0, 그리고 서로 다른 표현의 NaN을 구분할 수 있습니다),
      • 그렇지 않으면, std::strong_ordering 타입의 값을 생성하며, 이는 T의 비교 연산자가 관찰한 순서와 일치합니다,
    • 그렇지 않으면, 올바른 형식인 경우 std::strong_ordering(std::compare_three_way()(t, u)) 입니다.
  • 다른 모든 경우에서 표현식은 비정형(ill-formed)이며, 템플릿 인스턴스화의 즉시 문맥에 나타날 때 대체 실패를 초래할 수 있습니다.

커스터마이제이션 포인트 객체

이름 std::strong_order 는 사용자 지정 지점 객체 를 나타내며, 이는 함수 객체 의 const 리터럴 semiregular 클래스 타입입니다. 자세한 내용은 CustomizationPointObject 를 참조하십시오.

IEEE 부동 소수점 타입의 엄격한 전체 순서

동일한 IEEE 부동 소수점 타입의 값 x 와 y 가 있고, total_order_less ( x, y ) 가 ISO/IEC/IEEE 60559의 totalOrder 에 의해 정의된 엄격한 전체 순서에서 x 가 y 보다 앞서는지를 나타내는 부울 결과라고 하자.

( total_order_less ( x, y ) || total_order_less ( y, x ) ) == false 이면, 그리고 그 경우에만 x 와 y 가 동일한 비트 패턴을 가집니다.

  • x 와 y 모두 NaN이 아닌 경우:
    • x < y 이면, total_order_less ( x, y ) == true ;
    • x > y 이면, total_order_less ( x, y ) == false ;
    • x == y 인 경우,
      • x 가 음의 영이고 y 가 양의 영이면, total_order_less ( x, y ) == true ,
      • x 가 0이 아니고 x 의 지수 필드가 y 의 지수 필드보다 작으면, total_order_less ( x, y ) == ( x > 0 ) (십진 부동 소수점 숫자에만 의미 있음);
  • x 또는 y 가 NaN인 경우:
    • x 가 음의 NaN이고 y 가 음의 NaN이 아니면, total_order_less ( x, y ) == true ,
    • x 가 양의 NaN이 아니고 y 가 양의 NaN이면, total_order_less ( x, y ) == true ,
    • x 와 y 가 같은 부호의 NaN이고 x 의 가수 필드가 y 의 가수 필드보다 작으면, total_order_less ( x, y ) == ! std:: signbit ( x ) .

예제

참고 항목

6가지 연산자를 모두 지원하고 대체 가능한 3-way 비교의 결과 타입
(클래스)
(C++20)
3-way 비교를 수행하고 std::weak_ordering 타입의 결과를 생성함
(커스터마이제이션 포인트 객체)
3-way 비교를 수행하고 std::partial_ordering 타입의 결과를 생성함
(커스터마이제이션 포인트 객체)
3-way 비교를 수행하고 std::strong_ordering 타입의 결과를 생성함, operator <=> 를 사용할 수 없는 경우에도
(커스터마이제이션 포인트 객체)