有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

函数调用之间的java或运算符

以下两者之间有什么区别吗

if (!bool_function()) {
  void_function();
}

bool_function() || void_function();

除了可读性

即使第二个函数返回void,我也可以使用第二个表单吗? 在所有基于C的编程语言(C++、C#、Java)中,如果bool_function返回true,是否保证void_function不会执行

编辑: 我之所以问这个问题,是因为在我的C编译器上,is甚至没有给出任何警告,而且它按预期工作。我使用的是IAR嵌入式工作台IDE


共 (3) 个答案

  1. # 1 楼答案

    Java specification表示如果左手表达式为真,则不计算右手表达式。这似乎也适用于C#。如果你看C和C++规范,他们大概会说同样的事情。

  2. # 2 楼答案

    如果没有编译错误,我认为它们是一样的。这种现象就是所谓的短路评估

    bool_function() || void_function();

    如果bool_函数返回非零值,则无论返回void_函数(),该值或逻辑求值都将为TRUE,因此它将跳过执行后面的函数

    并不是所有的语言都描述这个特性,尤其是一些脚本语言短路评估增加了编译器实现的复杂性

  3. # 3 楼答案

    好吧,是的,第二个没有编译

    你不能有一个空洞和一个空洞

    更新:你说你的C编译器编译了这个,它工作得很好。我对此表示怀疑。也就是说,我确信你的编译器会编译它,但是bool || void的结果是什么?总是真的吗?总是假的?有时是一个,有时是另一个

    简而言之,不要这样做。使用第一种形式,告诉所有阅读代码的人你在做什么