括号运算符澄清

时间:2014-02-18 07:17:15

标签: c

int a=10,b=20;
b = a+b-(a=b); 

在这个表达式中,为什么(a=b)不是第一个操作?如果它是按优先级执行的话那么b必须自己获得20。但b本身就是10,为什么呢?任何人都可以澄清我的怀疑吗?

1 个答案:

答案 0 :(得分:4)

这会调用未定义的行为。任何事情都可能发生。请注意,此处(a=b)确定在减法之前进行评估,但不能保证b的值在评估之后立即分配给aa可能会在下一个序列点(此处语句的;)之后被修改。

标准规定

  

在前一个和下一个序列点之间,对象的存储值最多只能通过表达式的计算修改一次。此外,只能访问先前值以确定要存储的值

建议阅读:c-faq Question 3.8