我的兩個編譯器(g ++以及鐺)將無法編譯如下:比較向量不等式只使用向量元素上的相等運算符。爲什麼?
#include <vector>
struct A {
friend bool operator!=(A const& a1, A const& a2) { return false; }
};
int main()
{
std::vector<A> v1, v2;
return (v1 != v2);
}
的錯誤之處在於!(*__first1 == *__first2)
在stl_algobase.h地方是無效的。
換句話說,它完全忽略了現有的運營商!= A
。 不用說,如果我定義了operator==
那麼它編譯和工作。
這是應該如何按照標準?
如果是這樣,爲什麼?
op ==和op!=的重載是獨立的,沒有會自動定義的。標準庫編寫者做出了明智的決定,只使用其中的一個,併爲用戶提供另一個。 – Deduplicator 2014-09-20 21:33:37
標準容器上的'a!= b'被指定爲等同於'!(a == b)',並且'a == b'被指定爲'std :: equal(a.begin(),a。 end(),b.begin(),b.end())',指定使用'=='進行比較。 – 2014-09-20 21:38:47