嗨,大家好,所以我需要一些幫助瞭解如何將這些例如複合賦值運算符的工作C++運算符的presedence
int x=6;
x += x -= x * x;
X原來是-60有人可以解釋爲什麼和如何工作的?
嗨,大家好,所以我需要一些幫助瞭解如何將這些例如複合賦值運算符的工作C++運算符的presedence
int x=6;
x += x -= x * x;
X原來是-60有人可以解釋爲什麼和如何工作的?
忽略UB與序列點:
x += x -= x * x;
是
(x += (x -= (x * x)));
所以
x * x
- >36
x -= 36
- >x = -30
x += -30
- >x = -60
我相信這畢竟是UB。基本上它與'x + = ++ x'相同'' –
非常感謝Jarod :) – CanyoucSharp
@AntonSavin自C++ 11以來,在評估賦值之前對操作數進行「+ =」序列評估。請參見C++ 11或更高版本中的[expr.ass]/1 –
您在序列點之間不止一次修改'x',導致未定義的行爲。運算符優先級在這裏是無關緊要的。 –
爲什麼它的價值,不是一個愚蠢的,但密切相關的:http://stackoverflow.com/a/5475260/179910 –
所有這些都是相同的dups:不合理的代碼,沒有人會實際寫/使用發出作業練習:(( –