命名空间
变体
操作

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

来自 cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
成员函数
元素访问
迭代器
容量
修改器
搜索
操作
常量
非成员函数
I/O
比较
operator==operator!=operator<operator>operator<=operator>=operator<=>
(直到 C++20)(直到 C++20)(直到 C++20)(直到 C++20)(直到 C++20)(C++20)
数值转换
(C++11)(C++11)(C++11)
(C++11)(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
字面量
辅助类
推导指南 (C++17)

 
在头文件 <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) (自 C++11 起为 noexcept)
(自 C++20 起为 constexpr)
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)
(自 C++11 起为 noexcept)
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)
(自 C++11 起为 noexcept)
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)
(自 C++11 起为 noexcept)
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)
(自 C++11 起为 noexcept)
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)
(自 C++11 起为 noexcept)
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) (自 C++20 起为 constexpr)
template< class CharT, class Traits, class Alloc >

bool operator==( const CharT* lhs,

                 const std::basic_string<CharT,Traits,Alloc>& rhs );
(9) (直到 C++20)
template< class CharT, class Traits, class Alloc >

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

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

bool operator!=( const CharT* lhs,

                 const std::basic_string<CharT,Traits,Alloc>& rhs );
(11) (直到 C++20)
template< class CharT, class Traits, class Alloc >

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

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

bool operator<( const CharT* lhs,

                const std::basic_string<CharT,Traits,Alloc>& rhs );
(13) (直到 C++20)
template< class CharT, class Traits, class Alloc >

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

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

bool operator<=( const CharT* lhs,

                 const std::basic_string<CharT,Traits,Alloc>& rhs );
(15) (直到 C++20)
template< class CharT, class Traits, class Alloc >

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

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

bool operator>( const CharT* lhs,

                const std::basic_string<CharT,Traits,Alloc>& rhs );
(17) (直到 C++20)
template< class CharT, class Traits, class Alloc >

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

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

bool operator>=( const CharT* lhs,

                 const std::basic_string<CharT,Traits,Alloc>& rhs );
(19) (直到 C++20)
template< class CharT, class Traits, class Alloc >

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

                 const CharT* rhs );
(20) (自 C++20 起)

将字符串的内容与另一个字符串或以空字符结尾的 CharT 数组进行比较。

所有比较都是通过 compare() 成员函数完成的(该函数本身是根据 Traits::compare() 定义的)

  • 如果 lhsrhs 的大小都相等,并且 lhs 中的每个字符在 rhs 中具有相同位置的等效字符,则两个字符串相等。
1-7) 比较两个 basic_string 对象。
8-20) 比较 basic_string 对象和以空字符结尾的 CharT 数组。

如果该限定标识符存在并表示类型,则三元比较运算符 (/*comp-cat*/) 的返回类型为 Traits::comparison_category,否则为 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::stringstd::wstringstd::u8stringstd::u16stringstd::u32string 类型,则 operator<=> 的返回类型为 std::strong_ordering

(自 C++20 起)

[编辑] 示例

[编辑] 缺陷报告

以下行为变更的缺陷报告被追溯应用于之前发布的 C++ 标准。

DR 应用于 已发布的行为 正确的行为
LWG 2064 C++11 是否接受两个 basic_string 的重载是 noexcept 不一致;
接受 CharT* 的重载是 noexcept,但可能引发 UB
已修正为一致;
删除了 noexcept
LWG 3432 C++20 operator<=> 的返回类型不需要是比较类别类型 需要