operator()和operator <在C++中有什么区别?

Pau*_*scu 2 c++ operators

每当我想要比较的C++实体时,我就会实现operator<.然而,阅读其他人的代码,我看到通过实现可以实现同样的目标operator().

两者有什么区别?什么时候应该使用这些运营商?

Lig*_*ica 5

operator< 是定义比较运算符的规范方法:

struct A { /* some members */ };
struct B { /* some members */ };

// comparison operator
bool operator<(const A&, const B&);
Run Code Online (Sandbox Code Playgroud)

这为您提供了传统用法:

int main()
{
   A a;
   B b;

   const bool result = (a < b);
}
Run Code Online (Sandbox Code Playgroud)

你看到的是创造仿函数的人 ; 也就是说,整个类唯一目的是包装比较.为了使这些看起来像调用代码的函数,他们使用operator():

struct A { /* some members */ };
struct B { /* some members */ };

// comparison functor
struct comparator
{
   bool operator()(const A&, const B&);
};
Run Code Online (Sandbox Code Playgroud)

这使您在代码中的常规用法与我之前的示例相同:

int main()
{
   A a;
   B b;

   comparator c;
   const bool result = c(a,b);
}
Run Code Online (Sandbox Code Playgroud)

但是,您不会将其用于此目的.函数用于传递算法(特别是在通用代码中).它们还具有能够保持状态的额外好处,因为您可以使用构造函数参数.这使它们比简单的函数指针更灵活.

int main()
{
   std::vector<A> a(5);
   B b;

   comparator c;
   std::sort(a.begin(), a.end(), c);

   // or, simply:
   std::sort(a.begin(), a.end(), comparator());

   // all more easily extensible than:
   std::sort(a.begin(), a.end(), &someComparisonFunction);
}
Run Code Online (Sandbox Code Playgroud)