我有這樣的代碼,我發現它有點難以閱讀: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
}
但現在我應該關心效率?
我的意思是,在code1
中,如果第一個連接子句得到滿足,那麼它甚至不會去查看第二個連接子句,因爲已經清楚該語句是正確的。
但在我更可讀的例子中,必須計算cond1
和cond2
。或者如果expr2在其他地方沒有使用,編譯器是否足夠聰明,可以將code2
更改爲code1
?
我使用的gcc /克++(G ++ V3.4,要精確。)。 – Frank 2009-03-01 21:27:16