Table of Contents

C++の論理AND演算子&&と論理OR演算子||は短絡評価です。

  • &&:最初のオペランドが条件を満たさない場合(== false)、2番目のオペランドは評価されません。
  • ||:最初のオペランドが条件を満たす場合(== true)、2番目のオペランドは評価されません。
const auto x = 1;

if ((x > 1) && (x < 10)) { // (x > 1)がfalseの場合、(x < 10)は無視されます
    ...
}

if ((x > 0) || (x < 10)) { // (x > 0)がtrueの場合、(x < 10)は無視されます
    ...
}

このシステムを使用して、以下のようなコードを書くことができます:

assert ((!(myclass = getInstance(key))) || !myclass->isValid());

// 以下と同等です:
myclass = getInstance(key);
if (myclass != NULL) assert(!myclass->isValid())

個人的には、2番目の書き方の方が読みやすいと感じますが。

参考文献: