请注意,这与运算符优先级无关。()和++,未定义的行为和序列点,为什么这些构造(使用++)是未定义的行为?以及这里数百个类似的问题
简而言之:标准是否保证了结合性?
详细示例:从维基百科的运算符优先级条目中,operator*
和operator/
具有相同的优先级,并且它们是Left-to-right
运算符。这是否意味着,标准保证:
int res = x / y * z / t;
将被评估为
int res = ( ( x / y ) * z ) / t;
还是它定义了实现?
如果保证,你能报价吗?
只是出于好奇,在这些情况下我总是写括号。
准备删除这个问题,如果有这样的问题。
来自最新的公开草案
5.6 乘法运算符
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 标准。