2016-02-05 48 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 –