ranges_less
ranges_less (범위 less 함수 객체)
std::ranges::less는 두 값을 비교하여 첫 번째 값이 두 번째 값보다 작은지 확인하는 함수 객체예요. C++20부터 <functional> 헤더에서 제공되며, 인자에서 함수 호출 연산자의 매개변수 타입을 추론해요. 반환 타입은 추론하지 않아요.
출처: cppreference
본문
std::ranges::less는 비교를 수행하는 함수 객체예요. 함수 호출 연산자의 매개변수 타입을 인자로부터 추론하지만, 반환 타입은 추론하지 않아요.
중첩 타입 (Nested types)
| 중첩 타입 | 정의 |
|---|---|
is_transparent |
불명 (unspecified) |
멤버 함수 (Member functions)
| 멤버 함수 | 설명 |
|---|---|
operator() |
첫 번째 인자가 두 번째 인자보다 작은지 확인해요 (공개 멤버 함수) |
std::ranges::less::operator()
template < class T , class U > constexpr bool operator ()( T && t , U && u ) const ;
std::forward<T>(t) < std::forward<U>(u)라는 표현식을 expr이라고 할 때:
expr이 포인터를 비교하는 내장operator<호출로 이어지는 경우,t와u의 합성 포인터 타입(composite pointer type)을P라고 해요.- 변환된
t가 변환된u(둘 다 타입P)보다 구현 정의된 포인터의 엄격한 전체 순서(strict total order)에서 앞서면true를 반환하고, 그렇지 않으면false를 반환해요.T에서P로의 변환 시퀀스 또는U에서P로의 변환 시퀀스가 동등 보존(equality-preserving)이 아니면 동작이 정의되지 않아요.
- 변환된
- 그 외의 경우:
expr의 결과를 반환해요.std::totally_ordered_with<T, U>가 모델링되지 않으면 동작이 정의되지 않아요.
이 오버로드는 std::totally_ordered_with<T, U>가 만족될 때만 오버로드 해석에 참여해요.
타입 T의 표현식 expr1과 타입 U의 표현식 expr2가 존재하여, expr1과 expr2의 비교 결과가 엄격한 전체 순서를 위반하면 동작이 정의되지 않아요. 아래 표현식 중 정확히 하나만 true일 때 expr1과 expr2의 비교 결과는 엄격한 전체 순서를 따라요:
std::ranges::less{}(expr1, expr2)std::ranges::less{}(expr2, expr1)std::ranges::equal_to{}(expr1, expr2)
참고 (Notes)
std::less와 달리 std::ranges::less는 여섯 개의 비교 연산자 <, <=, >, >=, ==, !=가 모두 유효해야 해요 (totally_ordered_with 제약을 통해).
예제 (Example)
| 이 섹션은 불완전해요. 이유: 예제 없음 |
|---|
결함 보고서 (Defect reports)
다음 동작 변경 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었어요.
| DR | 적용 대상 | 발표된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 3530 | C++20 | 포인터 비교 시 구문 검사가 완화되었어요 | 의미론적 요구사항만 완화되었어요 |
같이 보기 (See also)
less |
x < y를 구현하는 함수 객체 (클래스 템플릿) [edit] |
|---|