私はいくつかの初心者の間違いを考えていましたが、if
ステートメントに間違いがありました。コードをこれに少し拡張しました:
int i = 0;
if (i = 1 && i == 0) {
std::cout << i;
}
if
ステートメントがtrueを返し、cout
のi
が1
。 i
が割り当てられている場合1
ifステートメントで、なぜi == 0
return true
?
これは operator precedence と関係があります。
_if (i = 1 && i == 0)
_
ではありません
_if ((i = 1) && (i == 0))
_
_&&
_と_==
_の両方の優先順位が_=
_よりも高いためです。本当にうまくいくのは
_if (i = (1 && (i == 0)))
_
1 && (i == 0)
の結果をi
に割り当てます。したがって、i
が_0
_で始まる場合、_i == 0
_はtrue
なので、_1 && true
_はtrue
(または_1
_ )、i
が_1
_に設定されます。次に、_1
_がtrueであるため、ifブロックに入り、i
に割り当てた値を出力します。
実際にコードが次のようになっていると仮定します。
#include <iostream>
using namespace std;
int main() {
int i = 0;
if (i = 1 && i == 0) {
cout << i;
}
}
それからこれ:
if (i = 1 && i == 0) {
として評価する
if (i = (1 && i == 0)) {
i
は1
に設定されます。