為什麼代碼中的comp函數只需返回0就可以表示兩串相同?
01-15
#include&
#include&
#include&
0 相等,正數大於,負數小於。通過減法延續下來的通俗約定而已,你定義 2、3、4也沒問題,只要花功夫去和用函數的人解釋清楚。
x86裡面的比較和減法做的事情是一樣的,後來這個關於整數的習慣做法被推廣了。
個人感覺是因為寫個函數嵌套一下就可以直接用作qsort的比較函數(霧 ... 只是直覺)
畢竟它的名字裡面有一半是cmp~兩個值如果相等,那麼這兩個值的差或者異或值是0,硬體上是這麼比較的,猜測軟體為了方便也和硬體設計的一致了,然後再慢慢演變就變成了相等為0,然後這麼做的人多了,就成了默認的規則。曾經接一個項目,裡面cmp的實現是相等返回true,不等返回fasle,我沒注意,然後程序一直出錯,後來一怒之下把cmp的實現又改回來了。
大概是因為要比較的兩個值相等時,必須返回0?
a="13", b="12"
返回false。a=b=「12」返回0,函數簽名返回值類型是bool,0視為false怎麼區分?立錯。
這是模仿C的int strcmp(a, b)沒有模仿對吧?
@_@這是約定。
至於0的淵源,見輪子哥的回答。推薦閱讀:
※如何看待微軟自己的產品不用自己的庫寫而用Qt寫?
※看完《C++ Primer》和《Effective C++》能找到一份起薪 5000 元以上的工作嗎?
※C++ deallocate(pointer p,size_type n)第二個參數問題?
※C++能勝任C的所有工作嗎?不行,有哪些?
※c++delete一個指針,沒有賦值為null,再創建同類型的指針,有沒有可能被釋放資源的內存地址被重新使用,賦值給新指針?如何用程序驗證這種可能性?這個class里有成員是引用,引用所指的內存也會被釋放嗎?