操作符重载:成员函数还是非成员函数?

操作符重载:成员函数还是非成员函数?

我看到声明为成员函数的重载运算符是不对称因为它只能有一个参数,而自动传递的另一个参数是this指针。所以没有标准来比较它们。另一方面,重载操作符声明为friend对称因为我们传递两个相同类型的参数,因此可以比较它们。

我的问题是,当我仍然可以将指针的值与引用进行比较时,为什么更喜欢朋友呢?(使用非对称版本的结果与对称版本相同)为什么STL算法只使用对称版本?


慕仙森
浏览 893回答 2
2回答

慕妹3146593

这不一定是区分friend操作符重载和成员函数操作符重载之间的关系。全球运算符重载和成员函数运算符重载。选择一个全球运算符重载,如果您希望允许类型出现在右(边),正确的二进制运算符的手侧。例如:Foo&nbsp;f&nbsp;=&nbsp;100;int&nbsp;x&nbsp;=&nbsp;10;cout&nbsp;<<&nbsp;x&nbsp;+&nbsp;f;只有在存在全局操作符重载的情况下,这才有效。Foo算子+(intx,ConstFoo&f);注意,全局运算符重载不一定需要是friend功能。只有在需要访问Foo,但情况并不总是如此。不管怎么说,如果Foo只有成员函数操作符重载,例如:class&nbsp;Foo{ &nbsp;&nbsp;... &nbsp;&nbsp;Foo&nbsp;operator&nbsp;+&nbsp;(int&nbsp;x); &nbsp;&nbsp;...};.那么我们只能有一个表达式Foo实例出现在左边加号操作员。
打开App,查看更多内容
随时随地看视频慕课网APP