为什么作为类成员的重载运算符只能有一个参数

jos*_*iel 2 c++

为什么我不能使用带有2个参数的重载运算符作为类的成员,如下所示:

myclass& operator+(const otherclass& cl, int value);
Run Code Online (Sandbox Code Playgroud)

Jon*_*rdy 11

类函数有一个隐式this参数,因此在类中声明的双参数运算符会隐式地想要获取比实际可能更多的参数:a + bwhere a的实例C是sugar for a.operator+(b),而不是C::operator+(a, b).如果您只想保持运算符的声明与类主体一致,则可以将它们声明为friend函数:

class C {
public:
    friend C& operator+(const C& a, const C& b);
};
Run Code Online (Sandbox Code Playgroud)