哪种是最佳实践(在本例中):
bool Foo::operator==(const Foo& other) {
return bar == other.bar;
}
// Implementation 1
bool Foo::operator!=(const Foo& other) {
return bar != other.bar
}
// Implementation 2
bool Foo::operator!=(const Foo& other) {
return !(*this == other);
}
Run Code Online (Sandbox Code Playgroud)
对于像>,<,<=,> =这样的运算符,我会尽可能使用实现2.但是,对于!=我认为实现1更好,因为没有进行另一个方法调用,这是正确的吗?
zne*_*eak 32
第二个实现有一个值得注意的约束,它==总是与boolean相反!=.这可能是您想要的,它使您的代码更容易维护,因为您只需要更改一个实现以保持两者同步.
chr*_*ris 12
在重载比较运算符时,应始终使用所拥有的内容.您应该定义的唯一两个是operator==和operator<.其余的你可以写这两个.它不容易出错,就好像你有一个错误,它只在一个地方.
OOP的一个主要特性是代码可重用性.如果您已经编写了代码,为什么要再写一次呢?坚持你所拥有的,你只需要测试一件事.
它更像是声明一个常量,然后在整个文件的几个位置使用它.