Poniższy program jest skompilowany z VC++ 2012.Dlaczego std :: sort crash, jeśli funkcja porównania nie jest operatorem <?
#include <algorithm>
struct A
{
A()
: a()
{}
bool operator <(const A& other) const
{
return a <= other.a;
}
int a;
};
int main()
{
A coll[8];
std::sort(&coll[0], &coll[8]); // Crash!!!
}
Jeśli zmienię return a <= other.a;
do return a < other.a;
następnie program działa zgodnie z oczekiwaniami, bez wyjątku.
Dlaczego?
Komparator dla 'std :: sort' wymaga ścisłe słabe porządkowanie, które '<=' nie * nie * dostarcza. – WhozCraig
Powinieneś napisać a (0) dla A ctor ... ale to się tutaj nie psuje! – lpapp
@WhozCraig: Domyślny konstruktor inicjuje je do zera. – GManNickG