1. ホーム
  2. c++

[解決済み】代入と等号チェックを組み合わせたif文がtrueを返すのはなぜ?

2022-04-08 15:14:57

質問

初心者の失敗談を考えてみたが、結局は if ステートメントを使用します。少しコードを拡張してこんな感じにしました。

int i = 0;
if (i = 1 && i == 0) {
    std::cout << i;
}

というのを見たことがあります。 if 文は真を返し、それ cout 's i として 1 . もし i が割り当てられている 1 は、なぜ、if文の i == 0 を返します。 true ?

解決方法は?

これは 演算子の優先順位 .

if (i = 1 && i == 0)

if ((i = 1) && (i == 0))

というのも、どちらも &&== よりも高い優先度を持ちます。 = . 実際のところ、次のようになります。

if (i = (1 && (i == 0)))

の結果を代入する。 1 && (i == 0)i . そこで、もし i で始まる 0 次に i == 0true ということで 1 && truetrue (または 1 を使用し、次に i に設定されます。 1 . そして 1 が真であれば、if ブロックに入り、if ブロックに代入した値を表示します。 i .