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

时间:2013-01-22 12:39:49

标签: c++ operator-overloading

即如果在类定义中我重载operator+operator=,这会对operator+=产生影响吗?反之亦然。

或者这些运营商是否完全独立,除非另有定义?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

语言对此没有任何限制 - 你可以有一个操作符+总和两个对象和一个+ =吹太阳,它仍然是合法的。另一方面,强烈建议不要提出违反直觉的运算符重载,否则你的类会非常难以使用。

顺便说一下,为了避免代码重复,经常用+ =:

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

答案 2 :(得分:0)

不,如果您的行为是什么,您还需要覆盖+=运营商!