遇到一些在return
行中有OR运算符(||
(的代码。有人可以解释一下这是做什么的吗?
下面是一些看起来像它的东西:
int main()
{
...
return (1 || 0);
}
但实际上它是一个函数(返回 1 或 0(而不是 1 和 0:
int main()
{
...
return (foo(x++, y) || foo(x, y++));
}
如果a
不为零,则a || b
计算结果为 1,而不管b
的值如何,如果a
为 0 且b
为非零,则计算结果为 1,否则为 0。
所以1 || 0
是1
,就像2 || 0
一样。
请注意,如果a
不为零,则不会计算b
:因此,如果b
是一个函数,则在这种情况下不会调用它。因此,在您的示例中,如果foo(x++, y)
不为零,则不调用foo(x, y++)
包括对y++
的评估。
请注意,无论参数的类型如何,a || b
的类型都是int
。 参见C++,其中类型为bool
。
逻辑 OR 具有短路属性。仅当 LHS 被评估为假时,才会评估 RHS。
在这种情况下,由于操作数是函数调用,所以
- 将进行 LHS 函数调用
foo(x++, y)
。 - 如果返回值为 1 (TRUTHY(,则不会计算 RHS,并将返回值
1
。 - 如果返回值为 0,则
foo(x, y++)
函数调用 made,返回值将基于函数调用的返回值。