这个问题给出了一个很好的答案,解释为什么要将运算符重载定义为非成员函数:Operator overloading : member function vs. non-member function?
如果您将运算符重载函数定义为成员函数,则编译器会将表达式(如s1 + s2)翻译为s1.operator+(s2)。这意味着,运算符重载成员函数在第一个操作数上被调用。这就是成员函数的工作方式!
但是如果第一个操作数不是类呢?如果我们想要重载第一个操作数不是类类型(而是double等)的运算符,那么就会有一个主要问题。因此,您不能像这样写10.0 + s2。但是,您可以为s1 + 10.0这样的表达式编写运算符重载成员函数。
现在我遇到了一个需要重载operator==的情况。在我的情况下,只比较相同类型的对象。
在这种情况下,是否仍然有理由将operator==定义为非成员函数,还是应该实现为成员函数?
但是如果第一个操作数不是类呢?如果我们想要重载第一个操作数不是类类型(而是double等)的运算符,那么就会有一个主要问题。因此,您不能像这样写10.0 + s2。但是,您可以为s1 + 10.0这样的表达式编写运算符重载成员函数。
现在我遇到了一个需要重载operator==的情况。在我的情况下,只比较相同类型的对象。
在这种情况下,是否仍然有理由将operator==定义为非成员函数,还是应该实现为成员函数?