c - () 的优先级最高,为什么会短路?

标签 c operators short-circuiting logical-and

() 的优先级最高,为什么会短路?

int a = 1, b = 0;
(--a)&&(b++);
为什么 (b++) 仍然短路?

最佳答案

我不觉得“短路”这个词特别有用。
不如说&&||有从左到右的评估顺序。 C 标准 (6.5.13) 实际上很好地解释了这一点:

the && operator guarantees left-to-right evaluation ...
If the first operand compares equal to 0, the second operand is not evaluated.


就是这样。左操作数 --a评估为 0。

What is the difference between operator precedence and order of evaluation?
在这种情况下,重要的是评估顺序。运算符优先级仅保证表达式按预期解析 - 哪些操作数“粘合”到哪个运算符。

关于c - () 的优先级最高,为什么会短路?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66474877/

相关文章:

c++ - 找出数组中最小的数及其所在的位置

java - 在 Java 中添加后递增

c - 在 c 中对 +、- 等运算符使用枚举时出现问题

python - dict.pop 或 dict.get 和评估

c - 此字符串的正则表达式

c++ - 如何使用 libpq 在 PostgreSQL 表中以二进制格式插入文本数组?

C 自由和结构

c - "##"在 C 中做什么?

java - `return <boolean exp> || <Object exp>` 如何成为返回对象的方法的有效返回语句?

c++ - 连词模板不会短路