2

式が複数の&&演算子を評価し、優先順位の低い演算子 ( ||、 など?:) を評価しない場合、 の 1 つが 0 を返すとすぐに式は 0 に評価されますか&&、それとも残り&&の s の評価を終了しますか?

例えば、

q=0; w=1; e=1; r=1;
if(q && w && r && e) {}

これは、0 に評価さif()れるとすぐに false に評価されますか (右側の演算子に関係なく q && w、残りはすべて 0 に評価される必要があるため)?&&

4

3 に答える 3

5

はい、誤った式が検出されるとすぐに、評価は早期に終了します (「短絡」)。これには例外が 1 つあり&&ます。関連する型の引数に対して演算子がオーバーロードされている場合です。これは絶対にお勧めできませんが、非常にまれですが、発生する可能性があります。

于 2011-08-25T19:25:17.887 に答える
4

はい、組み込みタイプの場合、短絡評価を行います。オーバーロードしたカスタム型、&&または||ショートサーキットを実行しないカスタム型。これにより、微妙なバグが発生する可能性があります。

于 2011-08-25T19:23:17.457 に答える
2

他の人はすでに答えを述べています(すなわち「はい」)。

これの特に慣用的な使用法の例を追加するために答えます:

if ((p != NULL) && (*p == 42))
{
    /* Do something */
}

短絡が起こらなかった場合、これはもっと不器用な方法で書かれなければならないでしょう。

これはPerl風の方法でも使用できることに注意してください。例:

someCondition && doSomething();

したがってdoSomething()、がである場合にのみ呼び出されsomeConditionますtrue。ただし、これdoSomething()は、に変換できる型を返す場合にのみコンパイルされbool、慣用的なC++とは見なされません。(この手法はCではコンパイルされないことにも注意してください。)

于 2011-08-25T19:28:29.820 に答える