提问者:小点点

C++中的结构比较器构造函数与运算符()


我有这个代码:

struct PointComparator
{
   explicit PointComparator(const Point& lowest)
      : m_lowest(lowest)
   {}
   
   bool operator()(const Point& a, const Point& b)
   {
      std::cout << m_lowest[0] << std::endl;
      return; // TODO
   }

private:
   Point m_lowest;
};

// in another function:
Point lowestPoint;  // (get this from somewhere)
std::sort(points.begin(), points.end(), PointComparator(lowestPoint));

我只是搞不懂显式关键字。当我执行正常排序时,我会调用和compar()点到函数,但现在引用了构造函数,那么它如何工作呢?


共1个答案

匿名用户

当我执行正常排序时,我会调用指向函数,[...]

实际上,没有。传递给的第三个参数是一个比较器。它可以是具有的函数对象。您不将其传递给算法。

当你写到:

std::sort(points.begin(), points.end(), PointComparator(lowestPoint));

这或多或少与

PointComparator compare(lowestPoint);
std::sort(points.begin(), points.end(), compare);

正在调用构造函数。创建的对象传递给,并且只有在内部调用

这里的仅意味着阻止从的隐式转换。它并不会真正对您的代码产生影响。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|中|结构|器|构造|函数|运算符)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?