0

即,如果在类定义中我重载operator+或者operator=这对operator+=? 反之亦然。

还是这些运算符完全独立,除非另有定义?

4

3 回答 3

5

不,这些运营商是完全独立的。

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

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
于 2013-01-22T12:41:18.367 回答
2

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

顺便说一句,为了避免代码重复,通常 + 以 += 的形式实现:

A operator+(const A& right) const
{
    A ret(*this);
    ret+=right;
    return ret;
} 
于 2013-01-22T12:47:27.683 回答
0

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

于 2013-01-22T12:42:17.733 回答