int a=10,b=20;
b = a+b-(a=b);
在这个表达式中,为什么(a=b)
不是第一个操作?如果它是按优先级执行的话那么b
必须自己获得20。但b
本身就是10,为什么呢?任何人都可以澄清我的怀疑吗?
答案 0 :(得分:4)
这会调用未定义的行为。任何事情都可能发生。请注意,此处(a=b)
确定在减法之前进行评估,但不能保证b
的值在评估之后立即分配给a
。 a
可能会在下一个序列点(此处语句的;
)之后被修改。
标准规定
在前一个和下一个序列点之间,对象的存储值最多只能通过表达式的计算修改一次。此外,只能访问先前值以确定要存储的值。
建议阅读:c-faq Question 3.8