做operator==
有好处还是必须做, operator<
, operator>
, operator<<
, operator>>
, !=
, >=
, ... 作为 friend 而不是类的方法?
我还没有找到一篇很好的文字来解释为什么只交 friend ......
我有一个很好的用例如果 C1 x; C2 y; C3 z;
我有 C3& operator+(C1& , C2&)
作为 C1 和 C2 的 friend ,即当类(class)不同时,但问题是为什么是同一个类(class)。
最佳答案
独立函数的论据是这些运算符根据操作数类型应该是对称的。当您的类具有允许将左侧操作数隐式转换为您的类类型的构造函数时,将关系运算符实现为独立函数而不是方法会有好处。否则,您将不得不编写显式构造函数调用或为其他左操作数类型重载运算符(组合爆炸)。
仅当您必须访问您类(class)的成员时才需要友元声明。由于关系运算符通常不会更改其操作数,因此在大多数情况下还有其他方法来读取成员。
不要过度使用运算符重载。特别是,当您的问题中有很多类类型(如 C1、C2、C3)时,很快就会变得不清楚,尤其是对于其他开发人员而言,您的运算符是什么意思。考虑使用一个名称可以清楚地描述您的意图的函数。
关于c++ - operator== 是成员函数还是友元函数,?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9554427/