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 || 0
是 1
,2 || 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 值打电话。
遇到一些在 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 || 0
是 1
,2 || 0
。
请注意,如果 a
为非零值,则 b
不会 求值:因此,如果 b
是一个函数,则它不会在这种情况下被调用。所以在你的例子中,foo(x, y++)
是 not 调用 including 如果 foo(x++, y)
是非 y++
的评估-零。
请注意,a || b
的类型是 int
,与参数的类型无关。比照。类型为 bool
.
逻辑或有一个short circuit property。仅当 LHS 被评估为 false 时才评估 RHS。
在这种情况下,由于操作数是函数调用,所以
- 将进行 LHS 函数调用
foo(x++, y)
。 - 如果 return 值为 1 (TRUTHY),则 RHS 将不会被评估,值
1
将被 returned。 - 如果 returned 值为 0,则
foo(x, y++)
函数调用完成,return 值将基于函数的 return 值打电话。