std :: equal_to是否保证默认调用operator ==?

时间:2013-02-27 21:06:14

标签: c++ std comparison-operators

我一直认为标准要求std::equal_to<T>的非专业模板调用T::operator==,但我注意到description at cppreference.com几乎意味着它是相反的方式;当然它没有提到它作为一项要求。我还检查了C ++ 11草案标准N3337,但也找不到任何保证。

如果您使用operator==创建一个类,那么您希望它可以在所有情况下使用。

我不能老实地想到一种实现std::equal_to的方法,这种方法不会这样,但我错过了什么?

2 个答案:

答案 0 :(得分:7)

  

std :: equal_to是否保证默认调用operator ==

即可。

如果不是专门的,equal_to的呼叫操作员将调用operator ==。从C ++ 11标准的第20.8.5段开始:

  

1该库为语言中的所有比较运算符提供基本的函数对象类(5.9,5.10)。

template <class T> struct equal_to 
{
    bool operator()(const T& x, const T& y) const;
    typedef T first_argument_type;
    typedef T second_argument_type;
    typedef bool result_type;
};
  

2 operator()返回x == y

答案 1 :(得分:2)

std::equal_to定义为:

template <class T> struct equal_to {
  bool operator()(const T& x, const T& y) const;
  typedef T first_argument_type;
  typedef T second_argument_type;
  typedef bool result_type;
};
  

operator()返回x == y

所以是的,如果T是一个类型,并为其定义了operator==重载作为左操作数,则会使用它。