如何在不使其成为友元函数的情况下重载 == 运算符?

How to overload == operator without making it a friend function?

我有一个 class SomeClass 并且我希望实现一个重载 == 来比较这个 class.

的两个实例

重载的 == 没有使用任何 SomeClass 的私有成员。所以,它不一定是 friend.

如何使其成为非成员、非友元函数?

目前,我的代码是这样的:

someclass.h

#ifndef SOMECLASS_H
#define SOMECLASS_H

class SomeClass
{
public:
    // Other class declarations, constructors
    friend bool operator==(const SomeClass a, const SomeClass b);
};

someclass.cpp

#include "someclass.h"

// Other stuff 

bool operator==(const SomeClass a, const SomeClass b) {
// do some comparison and return true/false
}

就像 @HolyBlackCat 指出的那样,您可以提供 operator== 重载作为自由函数。它将是 free-function,这意味着您可以写

#ifndef SOMECLASS_H
#define SOMECLASS_H

// namespaces if any

class SomeClass
{
    // Other class declarations, constructors
};

bool operator==(const SomeClass& a, const SomeClass& b) noexcept
{
    // definition
}

// end of namespaces if any!

#endif  // end of SOMECLASS_H

在header中声明operator==并在相应的cpp文件中提供free函数的定义