C ++中“+ =”的含义和名称是什么?

时间:2013-04-04 15:55:58

标签: c++ operators compound-assignment

我是C ++的新手,我一直在阅读和编写自己的一些代码。我不时会看到这些操作符,如果这是正确的用词吗?

+= // Not sure what it means

所以我的问题是:他们的意思/做什么,他们叫什么?

为了进一步参考,我想知道它们被称为什么,所以我可以很容易地查找它(仅仅搜索“+ =”,例如没有产生任何东西)。

编辑:对于其他不了解其含义的人(或者在我的情况下知道这些的名称),我发现这个维基百科链接可能对其他人有用:http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B

2 个答案:

答案 0 :(得分:13)

是的,这些都是运营商。更具体地说,它们被称为复合赋值算子。以下是它们的完整列表:

*= /= %= += -= >>= <<= &= ^= |=

它们的定义如下:

  

E1 op = E2形式的表达式的行为等同于E1 = E1 op E2,但E1仅被评估一次。

因此x += 5;x = x + 5;几乎相同。

您可以将其视为修改添加。如果你只是x + 5,那么表达式的结果就是你将x5加在一起,但x没有改变的结果。如果您执行x += 5;x实际上已将5添加到其值中。

答案 1 :(得分:0)

它只是一个缩写: a+=2;表示a=a+2; 当然有很多运算符:你可以重载它以赋予它替代意义,实际上我们经常这样做以提供意义,例如在将类添加到我们的类SomeClass中意味着什么:

SomeClass s;
s+=1; //operator+=(SomeClass& s, int i){} is used here

class A{
public:
    A():i_(123){}
    ~A(){}
    int i(){return i_;}
    A const& operator+=(int i){
       std::cout<<"operator+=";
       this->i_=i_+i;
    }
private:
    int i_;
};


int main(int argc, char** argv) {

    A a1;
    a1+=3;
    std::cout<<a1.i();
    return OK;
}
  

输出:operator + = 126