Namespaces
Variants
Actions

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

From cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
Constants
Non-member functions
I/O
Comparison
operator==operator!=operator<operator>operator<=operator>=operator<=>
(until C++20)(until C++20)(until C++20)(until C++20)(until C++20)(C++20)
Numeric conversions
(C++11)(C++11)(C++11)
(C++11)(C++11) 
(C++11)(C++11)(C++11)
(C++11)
(C++11)
Literals
Helper classes
Deduction guides(C++17)
 
Defined in header <string>
Compare two basic_string objects
template<class CharT, class Traits, class Alloc >

bool operator==(conststd::basic_string<CharT,Traits,Alloc>& lhs,

                 conststd::basic_string<CharT,Traits,Alloc>& rhs );
(1) (noexcept since C++11)
(constexpr since C++20)
template<class CharT, class Traits, class Alloc >

bool operator!=(conststd::basic_string<CharT,Traits,Alloc>& lhs,

                 conststd::basic_string<CharT,Traits,Alloc>& rhs );
(2) (until C++20)
(noexcept since C++11)
template<class CharT, class Traits, class Alloc >

bool operator<(conststd::basic_string<CharT,Traits,Alloc>& lhs,

                conststd::basic_string<CharT,Traits,Alloc>& rhs );
(3) (until C++20)
(noexcept since C++11)
template<class CharT, class Traits, class Alloc >

bool operator<=(conststd::basic_string<CharT,Traits,Alloc>& lhs,

                 conststd::basic_string<CharT,Traits,Alloc>& rhs );
(4) (until C++20)
(noexcept since C++11)
template<class CharT, class Traits, class Alloc >

bool operator>(conststd::basic_string<CharT,Traits,Alloc>& lhs,

                conststd::basic_string<CharT,Traits,Alloc>& rhs );
(5) (until C++20)
(noexcept since C++11)
template<class CharT, class Traits, class Alloc >

bool operator>=(conststd::basic_string<CharT,Traits,Alloc>& lhs,

                 conststd::basic_string<CharT,Traits,Alloc>& rhs );
(6) (until C++20)
(noexcept since C++11)
template<class CharT, class Traits, class Alloc >

constexpr/*comp-cat*/
    operator<=>(conststd::basic_string<CharT,Traits,Alloc>& lhs,

                 conststd::basic_string<CharT,Traits,Alloc>& rhs )noexcept;
(7) (since C++20)
Compare a basic_string object and null-terminated array of T
template<class CharT, class Traits, class Alloc >

bool operator==(conststd::basic_string<CharT,Traits,Alloc>& lhs,

                 const CharT* rhs );
(8) (constexpr since C++20)
template<class CharT, class Traits, class Alloc >

bool operator==(const CharT* lhs,

                 conststd::basic_string<CharT,Traits,Alloc>& rhs );
(9) (until C++20)
template<class CharT, class Traits, class Alloc >

bool operator!=(conststd::basic_string<CharT,Traits,Alloc>& lhs,

                 const CharT* rhs );
(10) (until C++20)
template<class CharT, class Traits, class Alloc >

bool operator!=(const CharT* lhs,

                 conststd::basic_string<CharT,Traits,Alloc>& rhs );
(11) (until C++20)
template<class CharT, class Traits, class Alloc >

bool operator<(conststd::basic_string<CharT,Traits,Alloc>& lhs,

                const CharT* rhs );
(12) (until C++20)
template<class CharT, class Traits, class Alloc >

bool operator<(const CharT* lhs,

                conststd::basic_string<CharT,Traits,Alloc>& rhs );
(13) (until C++20)
template<class CharT, class Traits, class Alloc >

bool operator<=(conststd::basic_string<CharT,Traits,Alloc>& lhs,

                 const CharT* rhs );
(14) (until C++20)
template<class CharT, class Traits, class Alloc >

bool operator<=(const CharT* lhs,

                 conststd::basic_string<CharT,Traits,Alloc>& rhs );
(15) (until C++20)
template<class CharT, class Traits, class Alloc >

bool operator>(conststd::basic_string<CharT,Traits,Alloc>& lhs,

                const CharT* rhs );
(16) (until C++20)
template<class CharT, class Traits, class Alloc >

bool operator>(const CharT* lhs,

                conststd::basic_string<CharT,Traits,Alloc>& rhs );
(17) (until C++20)
template<class CharT, class Traits, class Alloc >

bool operator>=(conststd::basic_string<CharT,Traits,Alloc>& lhs,

                 const CharT* rhs );
(18) (until C++20)
template<class CharT, class Traits, class Alloc >

bool operator>=(const CharT* lhs,

                 conststd::basic_string<CharT,Traits,Alloc>& rhs );
(19) (until C++20)
template<class CharT, class Traits, class Alloc >

constexpr/*comp-cat*/
    operator<=>(conststd::basic_string<CharT,Traits,Alloc>& lhs,

                 const CharT* rhs );
(20) (since C++20)

Compares the contents of a string with another string or a null-terminated array of CharT.

All comparisons are done via the compare() member function (which itself is defined in terms of Traits::compare()):

  • Two strings are equal if both the size of lhs and rhs are equal and each character in lhs has equivalent character in rhs at the same position.
1-7) Compares two basic_string objects.
8-20) Compares a basic_string object and a null-terminated array of CharT.

The return type of three-way comparison operators (/*comp-cat*/) is Traits::comparison_category if that qualified-id exists and denotes a type, std::weak_ordering otherwise. If /*comp-cat*/ is not a comparison category type, the program is ill-formed.

The <, <=, >, >=, and != operators are synthesized from operator<=> and operator== respectively.

(since C++20)

Contents

[edit]Parameters

lhs, rhs - strings whose contents to compare

[edit]Return value

1-6,8-19)true if the corresponding comparison holds, false otherwise.
7,20)static_cast</*comp-cat*/>(lhs.compare(rhs)<=>0).

[edit]Complexity

Linear in the size of the strings.

[edit]Notes

If at least one parameter is of type std::string, std::wstring, std::u8string, std::u16string, or std::u32string, the return type of operator<=> is std::strong_ordering.

(since C++20)

[edit]Example

[edit]Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior
LWG 2064C++11 whether overloads taking two basic_strings are noexcept was inconsistent;
overloads taking a CharT* were noexcept but might raise UB
made consistent;
noexcept removed
LWG 3432C++20 the return type of operator<=> was not required to be a comparison category type required
close