在执行代码之前处理if中的所有逻辑OR分离检查吗?

Que*_*atl -1 c# c++ java if-statement logical-operators

假设我在这样的方法中有一个if语句:

if ( foo() || bar() ) {
    return true;
}
Run Code Online (Sandbox Code Playgroud)

在评估是否执行代码之前,或者只要一个条件满足if,就会完全处理这两者foo()bar()两者?

我询问原因就是我的等价物foo()bar()方法是相当昂贵的计算功能,而如果foo()单独满足的条件,如果我不想执行bar().因此,我目前的代码是:

if ( foo() ) {
    return true;
}
if ( bar() ) {
    return true;
}
Run Code Online (Sandbox Code Playgroud)

这是必要的,还是逻辑OR分离函数表现为需要?

Luc*_*ore 7

&&||短路的所有3种语言据我所知,所以如果foo()到求值true,bar()将不会被调用.

5.15逻辑OR运算符[expr.log.or]

1)|| 操作员组从左到右.操作数都在上下文中转换为bool(第4条).如果其任一操作数为true,则返回true,否则返回false.不同于|,||保证从左到右的评估; 此外,如果第一个操作数的计算结果为,则不计算第二个操作数true.(强调我的)