首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ string 關係運算符重載:三種形式支援雙向比較

     編輯:程式設計疑難解答

問題背景

std::string 為 6 個關係運算符(>, >=, <, <=, ==, !=)各提供三種重載,以支援以下比較場景:

  1. string vs string
  2. string vs C-style string (const char*)
  3. 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 無法編譯(字面值無成員函數)。
  • 非成員函數 + 隱含轉換(或額外重載)確保雙向比較語法對稱。
  • 比較邏輯基於字典序(lexicographical comparison),對應機器碼序(通常為 ASCII/Unicode 碼點序)。

現代 C++ 建議

C++20 引入三向比較運算符 <=>,單一定義即可自動生成所有關係運算符,大幅減少樣板碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved