4

请注意,这与运算符优先级无关。 () 和 ++ ,未定义的行为和序列点为什么这些构造(使用 ++)未定义的行为?和数百个类似的问题在这里


很快:标准是否保证了关联性?

详细示例:来自维基百科的文章运算符优先级,operator*并且operator/具有相同的优先级并且它们是Left-to-right运算符。这是否意味着,该标准保证,这:

int res = x / y * z / t;

将被评估为

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

或者它的实现定义?

如果有保障,可以报价吗?


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

4

2 回答 2

6

来自最新公开的草稿

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;
于 2012-08-17T12:20:01.883 回答
5

n3337 5.6/1

乘法运算符 *、/ 和 % 从左到右分组。

阅读 5 par 标准。

于 2012-08-17T12:19:39.820 回答