如果我有重载<,我们是否需要重载 == 运算符?
Do we need to overload == operator if I have overloaded <?
我有一个自定义类型A的对象(这个类有很多成员,它们是std::string、向量等,但没有原始指针)。
现在,我有一个a对象的列表。
A tmpobj;
std::list<A> temp;
如果我想调用std::list::remove函数从列表中删除特定对象我正在尝试
temp.remove(tmpobj)
现在,以下是我的问题
- 我想我需要重载==运算符。请告诉我如果我不需要,如果默认的==会起作用。我不确定关于这个。我知道如果我没有任何基于STL的成员
我已经有<操作员过载。然而,我认为"=="需要提供操作员。这是对的吗。一个参数可以是,我们可以将"=="确定为对'<'的两个调用像这样的操作员
如果(a<b||b<a)return false其他的返回true;
还是因为打两个电话效率低而没有这样做,或者还有其他原因吗。
n3337 23.3.5.5
void remove(const T& value);
template <class Predicate> void remove_if(Predicate pred);
效果:清除列表迭代器i引用的列表中满足以下条件的所有元素保持:*i==值,pred(*i)!=false。仅使迭代器和对已擦除的的的引用无效元素。
因此,您需要重载的operator ==
或谓词。
没有默认的operator==
,所以不用担心。当编译器抱怨您的类没有operator==
时,请实现它;-)
如果类的所有可能值一起表示一个具有"完全有序"数学性质的集合,则可以根据operator<
实现operator==
。这不一定是最有效的方法,但C++没有假设它的主要原因是,一般来说,它没有假设不同的重载运算符应该如何相互关联。并非所有类型都必须表示完全有序集。无论好坏,C++都允许您使用operator<
来表示偏序。
相关文章:
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- 我的运算符重载是否有效<<(流插入)左操作数不是 ostream
- 重载虚拟行为是否定义良好?
- 检查类是否具有可能重载的函数调用运算符
- C++:如果我重载新运算符,我是否也必须重载删除运算符?
- 预处理器是否可以更改运算符重载功能的符号?
- 如果我也使用复制构造函数并且重载 = 运算符,我是否需要析构函数?
- 在运算符重载中,运算符的左侧是否隐式传递给函数?
- 运算符重载是否真的需要返回值C++?
- 是否使用cv::Point2f类型重载std::排序
- 从模板检查成员函数重载是否存在
- 如何在C++编译时检查运算符的特定重载是否存在
- C# 运算符重载是否支持类似C++"+="?
- 尝试访问类的私有成员以消除重载是否格式不正确
- 此函数重载是否正确
- 在类中使用'const'和在C++中使用运算符重载是否有一个好的规则?
- 依赖类型不明确的 c++11 可变参数函数模板重载是否不明确
- 基成员函数的所有重载是否可以被单个模板化成员函数覆盖和转发到
- c++类重载:是否有可能让编译器根据模板判断使用哪一个?
- 用基数排序实现std::sort的重载是否合法?