为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
慕仙森 2019-06-28 17:11:43
操作符重载:成员函数还是非成员函数?我看到声明为成员函数的重载运算符是不对称因为它只能有一个参数,而自动传递的另一个参数是this指针。所以没有标准来比较它们。另一方面,重载操作符声明为friend是对称因为我们传递两个相同类型的参数,因此可以比较它们。我的问题是,当我仍然可以将指针的值与引用进行比较时,为什么更喜欢朋友呢?(使用非对称版本的结果与对称版本相同)为什么STL算法只使用对称版本?
查看完整描述

2 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

这不一定是区分friend操作符重载和成员函数操作符重载之间的关系。全球运算符重载和成员函数运算符重载。

选择一个全球运算符重载,如果您希望允许类型出现在右(边),正确的二进制运算符的手侧。例如:

Foo f = 100;int x = 10;cout << x + f;

只有在存在全局操作符重载的情况下,这才有效。

Foo算子+(intx,ConstFoo&f);

注意,全局运算符重载不一定需要是friend功能。只有在需要访问Foo,但情况并不总是如此。

不管怎么说,如果Foo只有成员函数操作符重载,例如:

class Foo{
  ...
  Foo operator + (int x);
  ...};

.那么我们只能有一个表达式Foo实例出现在左边加号操作员。


查看完整回答
反对 回复 2019-06-28
  • 2 回答
  • 0 关注
  • 892 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信