C++运算符==,检查自相等是否重要
C++ operator ==, is it important to check self equality?
敌人的例子我们嘿嘿
bool Foo::operator==(const Foo& other) {
return bar == other.bar;
}
像这样的对象是否重要吗?
bool Foo::operator==(const Foo& other) {
if (this == &other) {
return true;
}
return bar == other.bar;
}
如果要进行大量比较,那么检查自相等可能会加快执行速度。 在这种情况下,应该对代码进行分析,以查看比较同一对象时节省了多少时间,与比较单独变量时所花费(浪费(的时间。
可以想象,这可能会使涉及同一对象的比较更快一些,但代价是减慢了不同对象的比较速度。在几乎所有情况下,这都是净损失。
在上面的代码中检查两次没有任何意义。但是,在某些情况下,当您使用动态内存时,事情可能会快速变化,这可能是有益的。对于您拥有的代码,第一个代码块就足够了。
相关文章:
- JS相等运算符(如===)是否可以使用embind类型
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- 是否所有C++运算符都接受操作数?
- 一元*运算符的操作数是否期望一个 prvalue
- 在 c++ 中是否有办法使用点运算符而不是 -> 来表示 pSomePointer->pValue->nSubvalue
- 是否所有C++运算符都返回一些内容
- 是否可以将带有字符串化运算符的宏转换为 constexpr?
- 我的运算符重载是否有效<<(流插入)左操作数不是 ostream
- C++矢量复制构造函数和赋值运算符是否也复制保留空间?
- 是否允许编译器省略对指针的 &* 运算符的组合调用?
- 检查类是否具有可能重载的函数调用运算符
- 使用 at() 访问 std::map 元素是否比运算符 [] 慢?
- 是否允许三元运算符在C++中计算两个操作数?
- C++:如果我重载新运算符,我是否也必须重载删除运算符?
- 复合赋值运算符是否不如 C++ 精确?
- 预处理器是否可以更改运算符重载功能的符号?
- 矢量擦除方法是否需要类才能具有 = 运算符?
- 如果我也使用复制构造函数并且重载 = 运算符,我是否需要析构函数?
- 基于 SFINAE 的特征,用于确定是否支持运算符 +
- 放置新运算符是否会禁用默认的新运算符?