c++ - operator== 是成员函数还是友元函数,?

标签 c++

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/

相关文章:

c++ - 什么是 xtree 是 Visual C++?

c++ - std::any_of 与顺序执行策略一起使用时是否保证迭代顺序?

c++ - 如何限制 C++ 中依赖于实现的语言特性的影响?

android - 将私有(private)字段添加到 android 上的 JNI 类会卡住应用程序

c++ - 0xC0000005 : Access violation writing location

c++ - 动态二维数组丢失第二维

c++ - C++ 中的内联函数

c++ - 将 gcc 属性与 C++11 属性语法一起使用

java - Unicode码指向字节并反转: how do you do that in C++?

c++ - 使用非文字字符串抛出 out_of_range 异常。什么是较小的邪恶?