为什么运营商有时是独立的,有时是类方法?

Pau*_*lin 5 c++ operator-overloading

为什么有时候操作符覆盖被定义为类中的方法,比如

MyClass& MyClass::operatorFoo(MyClass& other) { .... return this; };
Run Code Online (Sandbox Code Playgroud)

有时这是一个单独的功能,比如

MyClass& operatorFoo(MyClass& first, MyClass& bar)
Run Code Online (Sandbox Code Playgroud)

它们是等价的吗?什么规则管理你何时以一种方式执行它以及何时执行另一种方式?

Tim*_*ter 11

如果您希望能够执行类似于3 + obj必须定义免费(非成员)运算符的操作.

如果您想让您的运营商受到保护或私有,您必须制作方法.

一些运营商不能是免费功能,例如operator->.

这已在这里得到解答:

全局运营商和成员运营商之间的差异


小智 5

如果你有像+这样的二元运算符,通常需要在两个操作数上执行类型转换.例如,字符串连接运算符需要能够将其操作数中的一个或两个从char*转换为字符串.如果是这种情况,则它不能是成员函数,因为左手操作数将是*this,并且不会执行转换.

例如:

operator+( a, b );  // conversions performed on a and b
a->operator+( b );  // conversion can only be performed on b
Run Code Online (Sandbox Code Playgroud)