在表达式中,+=是加法赋值运算符的行为。

28 浏览
0 Comments

在表达式中,+=是加法赋值运算符的行为。

最近我遇到了这个问题:赋值运算符链的理解。当回答这个问题时,我开始怀疑自己对加法赋值运算符+=或其他赋值运算符(&=*=/=等)行为的理解。

我的问题是,变量a在下面的表达式中何时会被原地更新,以便在评估过程中其更改后的值在其他地方反映出来,以及背后的逻辑是什么?请看下面的两个表达式:

表达式1

a = 1
b = (a += (a += a))
//结果是b = 3,但如果a被原地更新,那么结果应该是4

表达式2

a = 1
b = (a += a) + (a += a)
//结果是b = 6,但如果a没有被原地更新,那么结果应该是4

在第一个表达式中,当最内层的表达式(a += a)被评估时,似乎没有更新a的值,因此结果为3而不是4

然而,在第二个表达式中,a的值被更新,所以结果是6。

我们应该在什么情况下假设a的值会在表达式的其他地方反映出来,什么情况下不会呢?

0