2016-02-05 70 views
0

嗨,大家好,所以我需要一些帮助了解如何将这些例如复合赋值运算符的工作C++运算符的presedence

int x=6; 
x += x -= x * x; 

X原来是-60有人可以解释为什么和如何工作的?

+1

您在序列点之间不止一次修改'x',导致未定义的行为。运算符优先级在这里是无关紧要的。 –

+0

为什么它的价值,不是一个愚蠢的,但密切相关的:http://stackoverflow.com/a/5475260/179910 –

+0

所有这些都是相同的dups:不合理的代码,没有人会实际写/使用发出作业练习:(( –

回答

-2

忽略UB与序列点:

x += x -= x * x; 

(x += (x -= (x * x))); 

所以

x * x - >36

x -= 36 - >x = -30

x += -30 - >x = -60

+1

我相信这毕竟是UB。基本上它与'x + = ++ x'相同'' –

+0

非常感谢Jarod :) – CanyoucSharp

+0

@AntonSavin自C++ 11以来,在评估赋值之前对操作数进行“+ =”序列评估。请参见C++ 11或更高版本中的[expr.ass]/1 –