2013-04-04 87 views
-1

我对C++相当陌生,我一直在阅读和编写我自己的一些代码。我偶尔会看到这些运营商,如果这甚至是正确的用词?C++中“+ =”的含义和名称是什么?

+= // Not sure what it means 

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

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

编辑:对于其他人谁不知道的意思(或在我的情况知道的这些名字),我发现这个维基百科的链接,可能出现的方便的其他人:http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B

+0

我相信他们被称为*复合赋值运算符*。应该有更好的运气搜索使用该术语。 – 2013-04-04 15:58:55

+1

这个问题本来可以通过Google搜索轻松解决,显示的研究工作非常少。 – depa 2013-04-04 16:14:24

+1

虽然你不是不正确的德帕,但我不知道他们的名字,所以我正在寻找各种错误的东西。 – dusz 2013-04-04 16:25:13

回答

13

是的,这些是运营商。更具体地说,它们被称为复合赋值运算符。这里是他们的名单:

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

他们像这样定义:

形式E1 op = E2的表达的行为等同于除了E1E1 = E1 op E2只计算一次。

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

你可以认为它是一个修改的补充。如果您只是x + 5,则表达式的结果是您将x5一起添加时得到的结果,但x未更改。如果你这样做x += 5;,x实际上已经增加了5个值。

+0

说例如 int i = 5; i + = 5; //现在我是10岁? – dusz 2013-04-04 16:01:53

+0

是的,正好dusz,! – 4pie0 2013-04-04 16:03:55

+0

是的,它的确如此。基本上它只是减少了源代码的大小并增加了可读性 – 2013-04-04 16:04:20

0

它只是一个缩写: a+=2;意味着a=a+2; 当然,许多运营商:你可以重载它给它替代的意义,其实答案我们这样做往往提供例如在的情况下这意味着这意味着什么INT添加到我们的类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; 
} 

输出:运营商+ = 126

+1

从技术上讲,它是一个完全不同的操作员(对于非内置类型,不仅技术上而且实际上)。 – 2013-04-04 16:00:52

+0

当然这是不同的,但它扩展到这个,所以我解释了这个运算符的含义 – 4pie0 2013-04-04 16:02:12

+0

它可以被重载,使得它的含义不等于你展现的扩展。当然是 – 2013-04-04 16:09:50

相关问题