この場合、結果は 6 です。しかし、i=5 はゼロ以外の値と見なされませんか? i+=5 を実行すると、それは true としてカウントされます。なぜこれは違うのですか?(またいいえ、i==5 にするつもりはありませんでした)
int i=7;
if(i=5) {
cout << ++i;
} else {
cout << --i;
}
この場合、結果は 6 です。しかし、i=5 はゼロ以外の値と見なされませんか? i+=5 を実行すると、それは true としてカウントされます。なぜこれは違うのですか?(またいいえ、i==5 にするつもりはありませんでした)
int i=7;
if(i=5) {
cout << ++i;
} else {
cout << --i;
}
割り当ては、割り当てられたものを返します。あなたの例では:
int i = 7;
if (i = 5) { // returns 5, which is non-zero, or "true"
cout << ++i; // prints 6, or 5+1
} else {
cout << --i; // would print 4, or 5-1, if it was hit, which it never will
}
プレインクリメントとポストインクリメントで混乱するかもしれません。たとえば、次のことを考慮してください。
int i = 7;
if (i = 5) { // returns 5, which is non-zero, or "true"
cout << i++; // prints 5, i is 6 after this line
} else {
cout << i--; // would print 5, but i is 4 after this line
}
代入演算子は、オブジェクトが代入された後、オブジェクトの値を好き=
で+=
返します。したがって、何かfalse
またはを代入すると、代入演算子から0
取得できます。false
i=5
は に評価され5
、それtrue
は の目にはありif ()
ます。しかし、i=0
に評価され、 によって0
考慮false
されif ()
ます。
コードは次のように動作します。
i = 7;
i = 5;
if ( 5 ) // it's true. Isn't it ?
{
i = i + 1; // now i is 6
cout << i;
}