注意:這個問題不是關於總訂單。使用std::less
可獲得相同類型指針上的總訂單。運算符<(小於)指針是否一致?
According to this,比較指向operator<
的兩個指針是不允許的,例如,如果它們指向不同的分配。
在哪種意義上不允許?它是實現定義的,未指定的還是未定義的行爲?
我想我讀的地方,它沒有說明。實現不需要記錄行爲是什麼,但必須有一些行爲。所以這意味着,比較任何兩個指針仍然合法,但不一定會產生全部訂單。 這是否意味着,當比較相同的兩個指針兩次時,我們仍然必須得到一致的結果?一般情況是:在應用程序中兩次調用相同的未指定行爲總是會得到相同的結果?
int i1, i2;
int* a = &i1;
int* b = &i2;
bool b1 = a < b; // unspecified, right?
bool b2 = a < b;
assert(b1 == b2); // Is this guaranteed to be true?
你有沒有具體的參照,指出這是* *未定義,?通過閱讀* [expr.rel] *,我知道它是*未指定*。 – Holt
[這裏](http://eel.is/c++draft/expr。rel#3)它在第三點說,_否則,兩個指針都不會比另一個大。這不完全是一個UB。我錯了嗎? – skypjack
從鏈接的SO回答 - 「但是,您可以使用std :: less和其他關係比較函數對象來比較任何兩個指針,結果是實現定義的,但是可以保證有一個總的排序。 –