乘法和除法的混合是否能保证从左到右的结合性?

问题描述 投票:0回答:2

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


Shor:标准保证关联性吗?

详细示例:来自Wikipedia关于运算符优先级的文章,

operator*
operator/
具有相同的优先级,并且它们是
Left-to-right
运算符。这是否意味着,标准保证,这:

int res = x / y * z / t;

将被评估为

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

或者它的实现定义?

如果有保证的话可以报价吗?


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

c++ c operator-precedence associativity
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;

5
投票

n3337 5.6/1

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

阅读标准的 5 个标准杆。

© www.soinside.com 2019 - 2024. All rights reserved.