operator==,!=,<,<=,>,>=,<=>(std::basic_string_view)
template< class CharT, class Traits >
constexpr bool operator==( std::basic_string_view<CharT,Traits> lhs,
std::basic_string_view<CharT,Traits> rhs ) noexcept;
|
에 정의됨 (1) | (C++17부터) (C++20까지) |
template< class CharT, class Traits >
constexpr bool operator==(
std::basic_string_view<CharT,Traits> lhs,
std::type_identity_t<std::basic_string_view<CharT,Traits>> rhs ) noexcept;
|
(C++20부터) | |
template< class CharT, class Traits >
constexpr bool operator!=( std::basic_string_view<CharT,Traits> lhs,
std::basic_string_view<CharT,Traits> rhs ) noexcept;
|
(2) | (C++17부터) (C++20까지) |
template< class CharT, class Traits >
constexpr bool operator<( std::basic_string_view<CharT,Traits> lhs,
std::basic_string_view<CharT,Traits> rhs ) noexcept;
|
(3) | (C++17부터) (C++20까지) |
template< class CharT, class Traits >
constexpr bool operator<=( std::basic_string_view<CharT,Traits> lhs,
std::basic_string_view<CharT,Traits> rhs ) noexcept;
|
(4) | (C++17부터) (C++20까지) |
template< class CharT, class Traits >
constexpr bool operator>( std::basic_string_view<CharT,Traits> lhs,
std::basic_string_view<CharT,Traits> rhs ) noexcept;
|
(5) | (C++17부터) (C++20까지) |
template< class CharT, class Traits >
constexpr bool operator>=( std::basic_string_view<CharT,Traits> lhs,
std::basic_string_view<CharT,Traits> rhs ) noexcept;
|
(6) | (C++17부터) (C++20까지) |
template< class CharT, class Traits >
constexpr /*comp-cat*/ operator<=>(
std::basic_string_view<CharT,Traits> lhs,
std::type_identity_t<std::basic_string_view<CharT,Traits>> rhs ) noexcept;
|
(7) | (C++20부터) |
두 뷰를 비교합니다.
모든 비교는 compare() 멤버 함수(자체는 Traits::compare()로 정의됨)를 통해 수행됩니다.
- 두 뷰는
lhs와rhs의 크기가 모두 같고,lhs의 각 문자가rhs의 같은 위치에 동등한 문자를 가지고 있으면 같습니다.
- 순서 비교는 사전식으로 수행됩니다. 비교는 std::lexicographical_compare와 동등한 함수로 수행됩니다.
|
구현은 |
(C++20까지) |
|
삼방향 비교 연산자 (
|
(C++20부터) |
매개변수
| lhs, rhs | - | 비교할 뷰 |
반환값
복잡도
뷰의 크기에 선형적으로 비례합니다.
참고 사항
|
충분한 추가 오버로드는 하나의 매개변수 타입에서 비추론 문맥을 통해 구현될 수 있습니다. |
(until C++20) |
|
std::string_view , std::wstring_view , std::u8string_view , std::u16string_view 및 std::u32string_view 의 삼중 비교 결과 타입은 std::strong_ordering 입니다. std::type_identity_t 은 비추론 문맥에 사용되며, 이는 문자열 뷰 타입으로 암시적으로 변환 가능한 인자들이 문자열 뷰와 비교 가능하도록 만듭니다. |
(since C++20) |
예제
#include <string_view> int main() { using namespace std::literals; static_assert(""sv == ""sv); static_assert(""sv == "", "Selects an additional overload until C++20."); static_assert("" == ""sv, "Selects an additional overload until C++20." "Uses a rewritten candidate since C++20."); static_assert(!(""sv != ""sv), "Uses the rewritten candidate since C++20."); static_assert(!(""sv != ""), "Selects an additional overload until C++20;" "Uses a rewritten candidate since C++20."); static_assert(!("" != ""sv), "Selects an additional overload until C++20." "Uses a rewritten candidate since C++20."); }
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 3432 | C++20 |
operator<=>
의 반환 타입이 비교 범주 타입일 필요가 없었음
|
필수로 지정됨 |
| LWG 3950 | C++20 | 여전히 불필요한 추가 오버로드가 필요했음 | 오버로드 세트 축소됨 |