我已经知道x += 1
的意思是x = x + 1
。
=
符号将右侧的算术表达式的值分配给左侧的变量。
但是,如果我有一个类似x += y % 3
的表达式,这意味着x = (x + y) % 3
还是x = x + (y % 3)
?
+=
运算符既为变量分配值又表示算术,这让我感到困惑。
不幸的是,我目前不能仅仅测试一些代码来进行检查,所以希望我能在这里得到一些帮助。 我是C ++的新手,所以其中一些非常基本的东西仍然让我感到困惑...
答案 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)
。