3

を含むコードを持っています

bool fn()
{
...
//all the following are boolean functions.
return isTrue()
       &&isMsgReceived()
       &&isMsgSent();
}

問題は、それぞれの戻りブール関数自体が非常に長く、多くの計算を必要とすることです。実際には、前の関数がすでに失敗している場合 (and条件)、後続の関数をチェックしても意味がありません。

false最初の関数の1つがすでに失敗し、それ以上のチェックに行かない場合に備えて、を返す簡単な方法を提案してください。目的は、計算時間を短縮することです。

4

2 に答える 2

10

あなたのコードはすでにそれを行っています。

標準は明示的に述べています:

5.14 論理積演算子 [expr.log.and]

&& 演算子は、左から右にグループ化します。オペランドは両方とも文脈上 bool に変換されます (条項 4)。true両方のオペランドが true の場合は結果が返され、それ以外の場合は false になります。とは異なり&、は左から右への評価を&&保証します。最初のオペランドが の場合、2 番目のオペランドは評価されませんfalse

isTrue()に評価されるfalseと、次の関数は評価されません。

次に、最も安価な関数を最初に配置する必要があります。

于 2013-09-08T16:19:07.450 に答える