私はこのようなコードを持っている、と私は読んで、それは少し難しい見つける:C/C++コンパイラはこのif文を最適化しますか?
// code1
if((expensiveOperation1() && otherOperation() && foo())
|| (expensiveOperation2() && bar() && baz()) {
// do something
}
私はちょうどそれを読みやすくするために、次のようにそれを変更:
// code2
const bool expr1 = expensiveOperation1() && otherOperation() && foo();
const bool expr2 = expensiveOperation2() && bar() && baz();
if(expr1 || expr2){
// one of the conditions met
}
しかし、私が今すべき効率を気にする?
つまり、最初の結言句が満たされている場合は、文が真となることが既に明らかになっているので、2番目の結び付き句が満たされていれば、2番目の結び付き句を調べることさえ気にしません。
私のより読みやすい例では、cond1
とcond2
の両方を計算する必要があります。または、コンパイラは、expr2が他の場所で使用されていない場合、code2
をcode1
に変更するほどスマートになるでしょうか?
私はgcc/g ++(正確にはg ++ v3.4)を使用しています。 – Frank