簡體   English   中英

字符串類中的相等測試運算符

[英]Equality Test Operator in String Classes

我注意到,C ++中的許多字符串類沒有實現==運算符以與字符串進行比較。 背后的原因是什么? 據我所知,為字符串實現類應該使該字符串本身成為一個實體,而不是指向一組字符的指針。 因此,我們絕對應該期望實現==運算符以比較兩個實體(即字符串)的值!

std :: string是basic_string,它確實具有operator ==,它使用char_traits的compare方法。

您甚至可以放入自己的專家特征類來進行不區分大小寫的比較。

通常,當一個類不實現operator== ,是因為該類之外有一個自由函數。 自由函數operator==的優點是它在兩側都支持隱式轉換。 這對於字符串特別重要,因為在那里您經常使用const char[]文字,並希望進行隱式轉換。 例如

MyString S("Hello");
if ("hello" == S) { // Can't use MyString::operator== here
  std::cout << S;
}

對於字符串類不實現operator ==的原因是,如果您認為還有更多比較字符串的方法:區分大小寫/不區分大小寫,忽略重音,...,並且您提供了不同的比較函數讓用戶指定。

正如Jeff Foster所說,這仍然是一種選擇:它是用C ++中唯一的真實字符串(std :: string)實現的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM