C/C++ 中的运算符优先级和关联性

Operator precedence and Associativity in C/C++

本文关键字:优先级 关联性 运算符 C++      更新时间:2023-10-16

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


简而言之:标准是否保证了结合性

详细示例:从维基百科的运算符优先级条目中,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 标准。