我知道什么是 C 中的短路评估。
a && b
(如果 a = 0,则不检查操作数 b)
一个|| b
(如果 a = 非零则不检查操作数 b)
但是我卡在这个问题上了
int x = 0;
if (5 || 2 && ++x)
printf("%d", x);
这会输出 0
。
我的第一个想法是这样的:
根据优先级表,优先级为++
、&&
、||
(降序)
++x
:evaluated.x
变为1。2 &&++x
评估。计算两个操作数。||
被评估。
但是根据这个,应该打印1
,而不是0
。
我的第二个想法是这样的:
5 || anything
任何东西
都不会因为短路评估而被评估,所以这里没有优先级发挥作用。
最佳答案
表达式5 || 2 &&++x
等同于 5 || (2 &&++x)
由于运算符的优先级。
运行时计算表达式 5 || 2 &&++x
从左到右。
正如我们在 OR 中所知,如果第一个条件为真,则不会检查第二个条件。
所以这里 5 被评估为真,所以 (2 &&++x)
将不会被执行。
这就是为什么 x 在这里会保持为 0。
关于c - 同时使用 && || 进行短路评估运算符(operator),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36879912/