函数调用之间的java或运算符
以下两者之间有什么区别吗
if (!bool_function()) {
void_function();
}
及
bool_function() || void_function();
除了可读性
即使第二个函数返回void,我也可以使用第二个表单吗?
在所有基于C的编程语言(C++、C#、Java)中,如果bool_function
返回true,是否保证void_function
不会执行
编辑: 我之所以问这个问题,是因为在我的C编译器上,is甚至没有给出任何警告,而且它按预期工作。我使用的是IAR嵌入式工作台IDE
# 1 楼答案
Java specification表示如果左手表达式为真,则不计算右手表达式。这似乎也适用于C#。如果你看C和C++规范,他们大概会说同样的事情。
# 2 楼答案
如果没有编译错误,我认为它们是一样的。这种现象就是所谓的短路评估
如果bool_函数返回非零值,则无论返回void_函数(),该值或逻辑求值都将为TRUE,因此它将跳过执行后面的函数
并不是所有的语言都描述这个特性,尤其是一些脚本语言短路评估增加了编译器实现的复杂性
# 3 楼答案
好吧,是的,第二个没有编译
你不能有一个空洞和一个空洞
更新:你说你的C编译器编译了这个,它工作得很好。我对此表示怀疑。也就是说,我确信你的编译器会编译它,但是
bool || void
的结果是什么?总是真的吗?总是假的?有时是一个,有时是另一个简而言之,不要这样做。使用第一种形式,告诉所有阅读代码的人你在做什么