4

请注意,这有没有关系Operator Precedence..() and ++Undefined behavior and sequence pointsWhy are these constructs (using ++) undefined behavior?和几百篇关于这个类似的问题在这里运算符优先级和结合在C/C++


不久:是相关性由标准保证?

详细示例:从Wikipedia的文章对操作者的优先级,和operator*operator/具有相同的优先级,他们是Left-to-right运算符。这是否意味着,这标准保证,这:

int res = x/y * z/t; 

int res = ((x/y) * z)/t; 

或评估它的实现定义的?

如果有保证,你可以引用?


这只是出于好奇,我总是写在这些情况下,括号内。
准备删除问题,如果有这样的问题。

+1

是(!现在需要一些用于字符) – 2012-08-17 12:19:56

回答

6

从最新的公开可用的draft

5.6乘法运算符[expr.mul]

1乘法运算符*,/,和%组左到右。

multiplicative-expression: 
pm-expression 
multiplicative-expression * pm-expression 
multiplicative-expression/pm-expression 
multiplicative-expression % pm-expression 

那么解析就会像:

int res = x/y * z/t; 
int res = (x/y * z)/t; 
int res = ((x/y) * z)/t; 
+0

,而不是像'中期业绩=(X/Y)* Z /吨; int res =((x/y)* z)/ t;'?我有一些麻烦理解这个顺序。如果是这样,为什么?你能解释一下(我会接受的答案) – 2012-08-17 12:33:22

+0

我明白了,这个结果是一样的,只是问:) – 2012-08-17 12:33:45

+0

如果你看看解析树:这是'乘法表达式:乘法表达@ PM-expression' 。在解析表达式时,最右边的术语't'被隔离为'pm-expression',其余的被评估为另一个'multiplicative-expression'。下一步将把'z'识别为'pm-experssion'。 – TemplateRex 2012-08-17 12:35:39

5

n3337 5.6/1

乘法运算符*,/,和%组左到右。

读5标准看齐。