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;
}
可以想象,这可以使涉及同一对象的比较速度更快一些,但代价是减慢不同对象的比较速度。在几乎所有情况下,这都是净损失。
你在上面的代码中检查两次没有任何意义。然而,在某些情况下,当您使用动态内存时,事情会很快发生变化,这可能是有益的。对于您拥有的代码,第一块代码就足够了。
如果要进行大量比较,则检查自身是否相等可能会加快执行速度。在这种情况下,应该对代码进行概要分析,以查看在比较同一对象时节省了多少时间,而在比较单独的变量时则占用(浪费)了多少时间。
例如我们有
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;
}
可以想象,这可以使涉及同一对象的比较速度更快一些,但代价是减慢不同对象的比较速度。在几乎所有情况下,这都是净损失。
你在上面的代码中检查两次没有任何意义。然而,在某些情况下,当您使用动态内存时,事情会很快发生变化,这可能是有益的。对于您拥有的代码,第一块代码就足够了。
如果要进行大量比较,则检查自身是否相等可能会加快执行速度。在这种情况下,应该对代码进行概要分析,以查看在比较同一对象时节省了多少时间,而在比较单独的变量时则占用(浪费)了多少时间。