Namespaces
Variants

operator==,!=,<,<=,>,>=,<=>(std::basic_string)

Ресурс ru.cppreference.net
 
 
 
std::basic_string
 
Определён в заголовке <string>
Сравнивает два basic_string объекта
template< class CharT, class Traits, class Alloc >
bool operator==( const std::basic_string<CharT,Traits,Alloc>& lhs,
                 const std::basic_string<CharT,Traits,Alloc>& rhs );
(1) (noexcept начиная с C++11)
(constexpr начиная с C++20)
template< class CharT, class Traits, class Alloc >
bool operator!=( const std::basic_string<CharT,Traits,Alloc>& lhs,
                 const std::basic_string<CharT,Traits,Alloc>& rhs );
(2) (до C++20)
(noexcept начиная с C++11)
template< class CharT, class Traits, class Alloc >
bool operator<( const std::basic_string<CharT,Traits,Alloc>& lhs,
                const std::basic_string<CharT,Traits,Alloc>& rhs );
(3) (до C++20)
(noexcept начиная с C++11)
template< class CharT, class Traits, class Alloc >
bool operator<=( const std::basic_string<CharT,Traits,Alloc>& lhs,
                 const std::basic_string<CharT,Traits,Alloc>& rhs );
(4) (до C++20)
(noexcept начиная с C++11)
template< class CharT, class Traits, class Alloc >
bool operator>( const std::basic_string<CharT,Traits,Alloc>& lhs,
                const std::basic_string<CharT,Traits,Alloc>& rhs );
(5) (до C++20)
(noexcept начиная с C++11)
template< class CharT, class Traits, class Alloc >
bool operator>=( const std::basic_string<CharT,Traits,Alloc>& lhs,
                 const std::basic_string<CharT,Traits,Alloc>& rhs );
(6) (до C++20)
(noexcept начиная с C++11)
template< class CharT, class Traits, class Alloc >
constexpr /*comp-cat*/
    operator<=>( const std::basic_string<CharT,Traits,Alloc>& lhs,
                 const std::basic_string<CharT,Traits,Alloc>& rhs ) noexcept;
(7) (начиная с C++20)
Сравнивает basic_string объект и массив T
template< class CharT, class Traits, class Alloc >
bool operator==( const std::basic_string<CharT,Traits,Alloc>& lhs,
                 const CharT* rhs );
с нулевым завершителем (8)
template< class CharT, class Traits, class Alloc >
bool operator==( const CharT* lhs,
                 const std::basic_string<CharT,Traits,Alloc>& rhs );
(constexpr начиная с C++20) (9)
template< class CharT, class Traits, class Alloc >
bool operator!=( const std::basic_string<CharT,Traits,Alloc>& lhs,
                 const CharT* rhs );
(до C++20) (10)
template< class CharT, class Traits, class Alloc >
bool operator!=( const CharT* lhs,
                 const std::basic_string<CharT,Traits,Alloc>& rhs );
(до C++20) (11)
template< class CharT, class Traits, class Alloc >
bool operator<( const std::basic_string<CharT,Traits,Alloc>& lhs,
                const CharT* rhs );
(до C++20) (12)
template< class CharT, class Traits, class Alloc >
bool operator<( const CharT* lhs,
                const std::basic_string<CharT,Traits,Alloc>& rhs );
(до C++20) (13)
template< class CharT, class Traits, class Alloc >
bool operator<=( const std::basic_string<CharT,Traits,Alloc>& lhs,
                 const CharT* rhs );
(до C++20) (14)
template< class CharT, class Traits, class Alloc >
bool operator<=( const CharT* lhs,
                 const std::basic_string<CharT,Traits,Alloc>& rhs );
(до C++20) (15)
template< class CharT, class Traits, class Alloc >
bool operator>( const std::basic_string<CharT,Traits,Alloc>& lhs,
                const CharT* rhs );
(до C++20) (16)
template< class CharT, class Traits, class Alloc >
bool operator>( const CharT* lhs,
                const std::basic_string<CharT,Traits,Alloc>& rhs );
(до C++20) (17)
template< class CharT, class Traits, class Alloc >
bool operator>=( const std::basic_string<CharT,Traits,Alloc>& lhs,
                 const CharT* rhs );
(до C++20) (18)
template< class CharT, class Traits, class Alloc >
bool operator>=( const CharT* lhs,
                 const std::basic_string<CharT,Traits,Alloc>& rhs );
(до C++20) (19)
template< class CharT, class Traits, class Alloc >
constexpr /*comp-cat*/
    operator<=>( const std::basic_string<CharT,Traits,Alloc>& lhs,
                 const CharT* rhs );
(до C++20) (20)

(начиная с C++20)CharTСравнивает содержимое строки с другой строкой или с массивом

с нулевым завершителем. Все сравнения выполняются через функцию-член compare()Traits::compare() (которая сама определена в терминах

  • ): lhsДве строки равны, если размеры rhs и lhs равны и каждый символ в rhs имеет эквивалентный символ в
  • на той же позиции. –Сравнения на порядок выполняются лексикографически: сравнение выполняется функцией, эквивалентной std::lexicographical_compare или std::lexicographical_compare_three_way(начиная с C++20).
1-7) Сравнивает два объекта basic_string.
8-20) Сравнивает объект basic_string и массив CharT с нулевым завершителем.

Возвращаемый тип операторов трёхстороннего сравнения (/*comp-cat*/) — это Traits::comparison_category, если такое qualified-id существует и обозначает тип, в противном случае std::weak_ordering. Если /*comp-cat*/ не является типом категории сравнения, программа считается некорректной.

Операторы <, <=, >, >= и != синтезируются из operator<=> и operator== соответственно.

(начиная с C++20)

Параметры

lhs, rhs - строки, содержимое которых необходимо сравнить

Возвращаемое значение

1-6,8-19) true если соответствующее сравнение выполняется, false в противном случае.
7,20) static_cast < /*comp-cat*/ > ( lhs. compare ( rhs ) <=> 0 ) .

Сложность

Линейно от размера строк.

Примечания

Если хотя бы один параметр имеет тип std::string , std::wstring , std::u8string , std::u16string , или std::u32string , возвращаемым типом operator<=> является std::strong_ordering .

(since C++20)

Пример

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применяется к Поведение в опубликованной версии Корректное поведение
LWG 2064 C++11 было противоречие в том, являются ли noexcept перегрузки, принимающие два basic_string ;
перегрузки, принимающие CharT* были noexcept, но могли вызывать неопределённое поведение
сделано согласованным;
noexcept удалён
LWG 3432 C++20 тип возвращаемого значения operator<=> не требовался быть типом категории сравнения требуется