std::string 為 6 個關係運算符(>, >=, <, <=, ==, !=)各提供三種重載,以支援以下比較場景:
string vs stringstring vs C-style string (const char*)C-style string vs string// 1. string 與 string
bool operator==(const string& lhs, const string& rhs);
// 2. string 與 C-string (string 在左)
bool operator==(const string& lhs, const char* rhs);
// 3. C-string 與 string (string 在右)
bool operator==(const char* lhs, const string& rhs);
其餘 5 個運算符(!=, <, >, <=, >=)同理各三種,共 18 個非成員函數重載。
bool operator==(const string&),則 "abc" == str 無法編譯(字面值無成員函數)。C++20 引入三向比較運算符 <=>,單一定義即可自動生成所有關係運算符,大幅減少樣板碼。