是在C++中独立定义的算术/赋值运算符和复合赋值运算符

Are arithmetic/assignment operators and compound assignment operators independently defined in C++

本文关键字:赋值运算符 复合 C++ 独立 定义 是在      更新时间:2023-10-16

I.e如果在类定义中我重载operator+operator=,这对operator+=有任何影响吗?反之亦然。

或者,除非另有规定,这些操作员是否完全独立?

不,这些运算符是完全独立的。

当然,您可以使用其他方法来实现一个,但默认情况下它们是独立的。

struct X
{
    X& operator = (const X&);
    X operator + (const X&) const;
    //X& operator += (const X& other) 
    //        { operator=(operator+(other)); return *this; }
};
X x, y;
x += y; //doesn't compile unless you uncomment that line

该语言对此没有任何限制-您可以使用一个运算符+来对两个对象求和,使用一个+=来炸毁太阳,这仍然是合法的。另一方面,强烈建议不要出现违反直觉的运算符重载,否则您的类将导致使用起来极其尴尬。

顺便说一句,为了避免代码重复,通常+是根据+=:实现的

A operator+(const A& right) const
{
    A ret(*this);
    ret+=right;
    return ret;
} 

不,如果你有什么行为,你还需要重写+=运算符!