我一直认为该标准需要非专用模板std::equal_to<T>
来调用T::operator==
,但我注意到cppreference.com 上的描述几乎暗示它是相反的;当然,它没有将其作为要求提及。我还检查了 C++11 草案标准 N3337,也找不到任何保证。
如果您使用 an 创建一个类,operator==
您希望它可以在所有情况下使用。
老实说,我想不出一种无法以std::equal_to
这种方式实现的方法,但是我错过了什么吗?
我一直认为该标准需要非专用模板std::equal_to<T>
来调用T::operator==
,但我注意到cppreference.com 上的描述几乎暗示它是相反的;当然,它没有将其作为要求提及。我还检查了 C++11 草案标准 N3337,也找不到任何保证。
如果您使用 an 创建一个类,operator==
您希望它可以在所有情况下使用。
老实说,我想不出一种无法以std::equal_to
这种方式实现的方法,但是我错过了什么吗?
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
。
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==
,它将被使用。