我觉得我对 friend
关键字的理解有点坑。
我有一堂课, presentation
。我在我的代码中将它用于两个变量, present1
和 present2
,我将其与 ==
进行比较:
if(present1==present2)
以下是我如何定义运算符 ==
(在 class presentation
中):
bool operator==(const presentation& p) const;
但是,有人告诉我使用 friend
并在课堂之外定义它会更好:
friend bool operator==(presentation&, presentation&);
为什么?两者有什么区别?
原文由 Nadav 发布,翻译遵循 CC BY-SA 4.0 许可协议
在第一种情况下,您的函数
operator==
是非静态类成员。因此,它可以访问私有和受保护的成员变量。在第二种情况下,操作符是外部声明的,因此它应该被定义为类的友元来访问那些成员变量。