0

複数の条件で if ステートメントを使用している場合、それらはコンパイラでどのように管理されますか?

A) 最初のステートメントが満たされない場合、またはその逆の場合、2 番目のステートメントは無視されますか?

If(time > 3.0 && hitEnabled)

B) 後期定義が推奨されることが多いので、if ステートメントで 1 つの条件を使用することを優先する必要がありますか?

if(time > 3.0)
    if(hitEnabled)

ありがとう!

4

7 に答える 7

3
if(time > 3.0 && hitEnabled)

上記のステートメントでは、が false のhitEnabled場合は評価されません。time > 3.0

これを短絡と呼びます。

次のステートメントはが false のhitEnabled場合でも評価されtime > 3.0ますが、両方のオペランドが の場合は true を返しますtrue

if(time > 3.0 & hitEnabled)//note bitwise &

if(time > 3.0)
    if(hitEnabled)

ネストされた if ステートメントは、最初の条件を何度もチェックする必要がある場合などに役立ちます。

if(time > 3.0 && hitEnabled)
{
//DoSomething1
}
if(time > 3.0 && flag)
{
//DoSomething2
}

これは、ネストされた if ステートメントで次のように書き直すことができます。

if(time > 3.0)
{
    if(hitEnabled)
    {
    //DoSomething1
    }
    if(flag)
    {
    //DoSomething2
    }
}

この場合、不要なチェックを避けるためにネストされた if ステートメントを好みます

于 2013-10-14T09:42:51.037 に答える
2

&&最初の条件が false の場合、2 番目の条件は評価されず、全体的な結果は false になります。の場合||、最初の条件が true の場合、2 番目の条件は評価されず、全体的な結果は true になります。ロブが指摘したように、これは短絡評価として知られています。

ifこれは、最初のオペランドが true を返す場合にのみ、ステートメントの 2 番目のオペランドを評価したい場合に役立ちます。たとえば、変数を使用する前にその有効性を確認したい場合があります。

if(ptr != NULL && *ptr > x)

この場合、 の値は、ptrそうでない場合にのみ x に対してチェックされますNULL

于 2013-10-14T09:27:27.083 に答える