注意:答案是按照特定的顺序给出的,但由于许多用户根据投票而不是给出的时间对答案进行排序,因此这里是答案的索引,它们是最有意义的顺序:
(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)
我目前正在查看一个旧的C++代码库,并看到很多代码如下:
bool SomeClass::operator==( const SomeClass& other ) const
{
return member1 == other.member1 && member2 == other.member2;
}
bool SomeClass::operator!=( const SomeClass& other ) const
{
return member1 != other.member1 || member2 != other.member2;
}
Run Code Online (Sandbox Code Playgroud)
显然,比较逻辑是重复的,上面的代码可能必须在两个地方而不是一个地方进行更改.
AFAIK的典型实现方式operator!=是这样的:
bool SomeClass::operator!=( const SomeClass& other ) const
{
return !( *this == other );
}
Run Code Online (Sandbox Code Playgroud)
在后一种情况下,无论发生什么逻辑变化,operator==它都会自动反映出来,operator!=因为它只是调用operator==并执行否定.
是否有任何合理的情况operator!=应该以任何其他方式实现,除了重用operator==C++代码?