If 语句中的 AND(&&) 是否按照我键入的顺序进行检查?

Does AND(&&) inside an If-Statement get checked in the order I type it?

假设我有这个代码:

if(number_a==1 && number_b==2) {
doStuff();
}

我的代码 运行 会更快吗,如果我把它分成:

if(number_a==1){
    if(number_b==2){
        doStuff();
    }

}

或者计算机 运行 按照我给它的确切顺序执行代码,首先检查 a,如果 a 不是 [=18] 则立即继续=]1? 或者计算机是否有可能首先检查 b,或者同时检查两者(即使 a 不是 1)?

对于 C,这是明确定义的:首先评估 number_a == 1,仅当第一个条件为真时才评估 number_b == 2(这称为短路,如果其中之一很重要条件有评估的副作用)。

Cppreference.com 通过更正式的重述证实了这一点:

The logical AND expression has the form lhs && rhs

...

There is a sequence point after the evaluation of lhs. If the result of lhs compares equal to zero, then rhs is not evaluated at all (so-called short-circuit evaluation)

也就是说,您不必担心这个级别的优化问题,而应该相信您的编译器。由于流水线和其他低级位等微架构效应,这两种计算之间的差异是微观的,甚至可能与您的预期相反。

相反,专注于编写干净、简洁和可读的代码,同时编写在其设计中高效的算法。如果 绝对 必要,则可以执行微优化,作为后续步骤。