我一直认为标准要求std::equal_to<T>
的非专业模板调用T::operator==
,但我注意到description at cppreference.com几乎意味着它是相反的方式;当然它没有提到它作为一项要求。我还检查了C ++ 11草案标准N3337,但也找不到任何保证。
如果您使用operator==
创建一个类,那么您希望它可以在所有情况下使用。
我不能老实地想到一种实现std::equal_to
的方法,这种方法不会这样,但我错过了什么?
答案 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==
重载作为左操作数,则会使用它。