请注意,这与 运算符优先级.. () 和 ++ 、 未定义行为和序列点 、 为什么这些构造使用预增量和后增量未定义行为? 和数百个无关类似的问题在这里
Shor:标准保证关联性吗?
详细示例:来自Wikipedia关于运算符优先级的文章,
operator*
和operator/
具有相同的优先级,并且它们是Left-to-right
运算符。这是否意味着,标准保证,这:
int res = x / y * z / t;
将被评估为
int res = ( ( x / y ) * z ) / t;
或者它的实现定义?
如果有保证的话可以报价吗?
这只是出于好奇,在这些情况下我总是写括号。
如果有这样的问题,准备删除。
来自最新公开的草案
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;
n3337 5.6/1
乘法运算符 *、/ 和 % 从左到右分组。
阅读标准的 5 个标准杆。