C: return 行中的 OR 运算符?

C: OR operator in return line?

遇到一些在 return 行中具有 OR 运算符 (||) 的代码。有人可以解释一下它的作用吗?


这是看起来像的东西:

int main()
{
    ...

    return (1 || 0);
}

但实际上它是一个函数 (返回 1 或 0) 而不是 1 和 0:

int main()
{
    ...

    return (foo(x++, y) || foo(x, y++));
}

a || b 如果 a 为非零,则计算结果为 1,而不管 b 的值如何;如果 a 为 0 且 b,则计算结果为 1 ] 非零,否则为 0。

所以 1 || 012 || 0

请注意,如果 a 为非零值,则 b 不会 求值:因此,如果 b 是一个函数,则它不会在这种情况下被调用。所以在你的例子中,foo(x, y++)not 调用 including 如果 foo(x++, y) 是非 y++ 的评估-零。

请注意,a || b 的类型是 int,与参数的类型无关。比照。类型为 bool.

的 C++

逻辑或有一个short circuit property。仅当 LHS 被评估为 false 时才评估 RHS。

在这种情况下,由于操作数是函数调用,所以

  • 将进行 LHS 函数调用 foo(x++, y)
  • 如果 return 值为 1 (TRUTHY),则 RHS 将不会被评估,值 1 将被 returned。
  • 如果 returned 值为 0,则 foo(x, y++) 函数调用完成,return 值将基于函数的 return 值打电话。