澄清有关编译器评估顺序的代码

Clarification on code regarding compilers Order of Evaluation

根据我收集到的在线信息,评估顺序是先评估操作数的左侧,然后再评估右侧。然而,当在线查看时,这也类似于短路,因为它也是先评估左侧再评估右侧。在我的代码下方代表短路但是希望它显示评估顺序。有谁知道下面代码中需要更改什么以根据评估顺序显示代码,而不是在我的编译器中 运行 时当前显示为短路的代码。编译器使用 Minijava。

class ImpFact{
    public static void main(String[] a){
    System.out.println(new Fac().ComputeFac(10));
    }
}

class Fac {

    public int ComputeFac(int num){
    boolean a;
    boolean b;
    int result;

    a = false;
    b = false;

    if (a || b) {
    result = 3;
    }
    else {
    result = 7;
}
    return result;
}

}

我不确定我是否理解您对问题的期望答复。

但是很容易描述短路求值和严格求值顺序之间的区别。

考虑语句:

b = f(a) + g(a)

在保证严格从左到右计算顺序的语言中(例如Java),那么函数f将在函数g之前被调用,但是*两者函数将始终被调用。

另一方面,表达式

b = f(a) || g(a)

f 会先被调用,但很可能 g 不会被调用。 f returns 之后可以停止评估,如果它 returns 是一个真值。

还有一些语言(例如 C)不保证从左到右求值。在这些语言中,当计算 f(a) + g(a) 时,可能会在 f 之前调用 g。但短路评估(使用布尔运算符)的工作原理相同,因为短路评估必须严格排序。