考虑:
struct Foo { bool operator<(const Foo&) const;};
struct Bar { operator Foo() const; };
std::set<Foo> s;
Bar b;
s.find(b);
Run Code Online (Sandbox Code Playgroud)
默认情况下,s使用std::less<Foo>并使用s.find()a const Foo &,因此查找Foo从中构造一个临时的Bar,并将其用于所有比较.
相反,如果s改为透明比较仿函数std::less<>,那么结合异构查找,每个比较find()都将在a Foo和a 之间进行Bar,因此每次比较都会构造一个临时的Foo.这是一种无声的性能下降.