嗨,大家好,所以我需要一些帮助了解如何将这些例如复合赋值运算符的工作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:不合理的代码,没有人会实际写/使用发出作业练习:(( –