Kir*_*rov 4 c c++ operator-precedence associativity
请注意,这与Operator Precedence ..()和++,未定义的行为和序列点无关,为什么这些构造(使用++)是未定义的行为?以及关于此的数百个类似问题
简而言之:标准保证了协会性吗?
详细示例:来自维基百科关于运算符优先级的文章,operator*并且operator/具有相同的优先级,它们是Left-to-right运算符.这是否意味着,标准保证,这:
int res = x / y * z / t;
Run Code Online (Sandbox Code Playgroud)
将被评估为
int res = ( ( x / y ) * z ) / t;
Run Code Online (Sandbox Code Playgroud)
还是它的实现定义了?
如果有保证,你能引用吗?
这只是出于好奇,我总是在这些情况下写括号.
准备删除问题,如果有这样的话.
来自最新的公开草案
5.6乘法运算符[expr.mul]
1乘法运算符*,/和%组从左到右.
Run Code Online (Sandbox Code Playgroud)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;
Run Code Online (Sandbox Code Playgroud)