C:回流管中的OR操作员?



遇到一些在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 || 01,就像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,返回值将基于函数调用的返回值。

相关内容

  • 没有找到相关文章

最新更新