2012-09-04 24 views
1

我知道,(是否匹配或0)的比較方法會返回一個整數值表示像兩個字符串之間的區別。我的問題是,在發現不匹配的情況下,是否停止比較不匹配,或者直到指定爲止?string.compare何時停止比較? (STD)

它依賴於編譯器或者是它的標準呢?我目前使用gcc 4.1.2

+4

爲什麼任何人都可能在比較結果已經建立後繼續比較? – Jon

+3

你爲什麼在意?如果出於性能考慮,請放心,圖書館會做正確的事情。但是他們正確的做法*可能會涉及在第一個不相等的字符之後查看字符(例如,在一次比較幾個字節效率更高的體系結構中)。 –

+1

也許某種安全措施?我記得讀到關於PIN號碼攻擊的原因,基於ATM在第一次數字不匹配後停止檢查PIN的事實,給出了40次嘗試獲得4位PIN碼的最壞情況。 – Alex1985

回答

3

好,標準的不關心,但比較的結果 - 標準只關心的是 - 是完全依賴於第一個非匹配字符。因此,比較其他人對於任何實現都是毫無意義的,除非可以更容易地處理緩存或平臺的字大小,否則可能還有更多的字符。

1

這是沒有規定。

該標準指出rhs.compare(lhs)相當於char_traits::compare(&rhs[0], &lhs[0], min(rhs.size(), lhs.size())char_traits::compare描述丟棄字符比較的過去的值不匹配,但它實際上是否讀取字符不詳述的任何進一步的。