2

我一直认为该标准需要非专用模板std::equal_to<T>来调用T::operator==,但我注意到cppreference.com 上的描述几乎暗示它是相反的;当然,它没有将其作为要求提及。我还检查了 C++11 草案标准 N3337,也找不到任何保证。

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

老实说,我想不出一种无法以std::equal_to这种方式实现的方法,但是我错过了什么吗?

4

2 回答 2

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;
};

2operator()返回x == y

于 2013-02-27T21:08:53.567 回答
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==,它将被使用。

于 2013-02-27T21:09:02.500 回答