C++論理ANDとORの短絡評価
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番目の書き方の方が読みやすいと感じますが。
参考文献: