1. ホーム
  2. c++

[解決済み] bool の &= と |= 演算子は短絡するのでしょうか?

2022-03-04 16:29:41

質問

C++でこのようなコードを書く場合。

bool allTrue = true;
allTrue = allTrue && check_foo();
allTrue = allTrue && check_bar();

check_bar() は評価されません。 check_foo() が返される false . これは 短絡的な評価または短絡的な評価 であり、遅延評価原則の一部である。

複合代入演算子で動作するか &= ?

bool allTrue = true;
allTrue &= check_foo();
allTrue &= check_bar(); //what now?

論理的な場合 OR すべて置き換える &|truefalse .

解決方法は?

C++11から 5.17 Assignment and compound assignment operators :

E1 op = E2 の形の式の動作は、E1 が一度だけ評価されることを除けば、E1 = E1 op E2 と等価である。

しかし、あなたは論理ANDを混同しています。 が行います。 と、決して短絡しないビット単位のAND。

テキストスニペット &&= であり、ご質問のようなことを行うには、次のようになります。 どこにも は標準では見当たりません。その理由は、実際には存在しないからです。論理代入演算子はありません。