“ + =“运算符到底是做什么的?

时间:2019-01-16 14:47:00

标签: c++

我已经知道x += 1的意思是x = x + 1=符号将右侧的算术表达式的值分配给左侧的变量。 但是,如果我有一个类似x += y % 3的表达式,这意味着x = (x + y) % 3还是x = x + (y % 3)+=运算符既为变量分配值又表示算术,这让我感到困惑。

不幸的是,我目前不能仅仅测试一些代码来进行检查,所以希望我能在这里得到一些帮助。 我是C ++的新手,所以其中一些非常基本的东西仍然让我感到困惑...

2 个答案:

答案 0 :(得分:5)

  

=符号将右边的算术表达式的值分配给左边的变量

分配结果。分配是不同的,以后记住差异是很重要的(特别是动态分配,如果将分配与分配相混淆的话,确实会造成混乱)。

  

但是,如果我有一个像x += y % 3这样的表达式,那意味着x = (x + y) % 3还是x = x + (y % 3)

使用复合+=-=等运算符的部分原因是您不要扩展这样的表达式,从而避免了由您创建的歧义重新写。

x += y % 3

可以读为

tmp = y % 3; // evaluate right hand side
x += tmp;    // assign to left hand side

(如果您确实愿意,可以在评估x += tmp之后的之后将x = x + tmp扩展到tmp

无论如何,规则都记录在here中,无论如何,您绝对可以 测试一些代码来检查:https://ideone.com/81tvjH

答案 1 :(得分:2)

这里有一个困惑,因为您认为x += 1;始终是x = x + 1。对于整数,双精度型是正确的,但其他对象通常不是这种情况。许多实现都不会创建临时对象。或者可以做一些非常邪恶的事情。

因此,这是对operator+=的调用,该调用将赋值右侧的结果作为自变量。

所以对于整数,它是x = x + (y % 3)