C++中+=和=+的区别

16

在 C++ 编程时,我经常混淆 "+=" 和 "=+" 这两个运算符,前者才是我实际想用的操作符。Visual Studio 看起来接受这两个符号,但它们的行为不同,这是我程序中出现很多 bug 的原因。我知道 a += b 与 a = a+b 语义上是等价的,但是 "=+" 是什么意思呢?


1
正如其他人所回答的那样,你应该使用 += 而不是 =+。如果你发现自己经常犯这个错误,可以编写一个清单,列出需要在文件中查找并定期修复的事项(在发布之前)。=+ 将是其中之一。你还可以将常见的拼写错误 - lenght 代替 length,错误的格式 - if( 代替 if ( 等添加到列表中。 - Daniel Daranas
4个回答

23

=+实际上是= +(赋值和一元 + 运算符)。

为了帮助您记住 += ,请记住它首先执行加法,然后再执行赋值。当然,这取决于实际的实现,但它应该适用于原语。


16

a =+ b意思是a = +b,也就是说a = b


12
除非一元运算符 + 被重载。 - Daniel A. White
除非 b 是比 int 更小的整数类型,否则它将促使 b 提升为 int 并执行赋值操作。 - Pete Becker

5
如果你看到第一个是 =,那么它意味着你重新声明了变量的值, 但如果你看到第一个是 +,那么它意味着你要求编译器增加变量的值,记住这一点。
int x=20 ;
x=+10 ;
cout<< x <<endl ; // x  = 10


x+=10 ;
cout<< x<<endl ; // x= 10+10 = 20

-1

我可能记错了,但我认为在C、C++甚至Java(其语法与C和C++类似)中,=+和+=实际上行为非常相似。=+语句是赋值(等同于普通的=运算符),而+=会增加变量的值。

x += y以及x =+ y将具有相同的效果(也就是说,这两个都会导致x的新值为旧值加上y)。区别在于当您有一个稍微复杂的表达式时。

对于变量z,z = (x += y)和z = (x =+ y)将具有不同的输出结果。让我们看看每一个:

z = (x += y)将y添加到x,然后将z设置为x的新值。

z = (x =+ y)将z设置为x的旧值,然后将y添加到x。

我可能把这两个搞反了,但我确实记得之前在某个地方读到过我在这里描述的差异是这两者之间的实际差异。


你的记忆非常错误。z =+ x 被解析为 z = (+x),也就是 x 的一元正号。如果 x 是一个整数,那么这个正号没有任何作用。 - greyfade

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接