これは、ブール値として整数値を使用してきた歴史に由来しています。
がx
であるint
が、私はそれをブール値として使用しているので、if(x)...
インクリメントすると、操作前の真理値が何であれ、それtrue
以降の真理値が得られます(オーバーフローを除く)。
ただし、 (積分値が1の場合)または(積分値がそれ以外の場合-特にこれには0 [ ]と2が含まれる)または(積分値が1の場合)になる可能性があるため、--
の真理値のみの知識の結果を予測することは不可能です。もっと[ ])。x
false
true
false
true
速記としては機能しました++
が、機能--
しませんでした。
++
これとの互換性のためにboolsで許可されていますが、その使用は標準では非推奨であり、C++17で削除されました。
これは、私がブール値としてのみ使用することを前提としています。つまり、それ自体でオーバーフローを引き起こすのに十分な頻度でx
実行するまで、オーバーフローは発生しません。++
使用するタイプがcharで、CHAR_BITS
5のような低いものでも、これが機能しなくなるまでの32倍です(これは悪い習慣であるために十分な議論ですが、私はその習慣を擁護していません。なぜそれが機能するのかを説明するだけです)int
もちろん、32ビットの場合++
、これが問題になる前に2^32回使用する必要があります。ただし、の値を1から始めた場合、または0から始めて、前に1回だけ使用した場合に--
のみ結果が得られます。false
true
++
これは、0より少し小さい値で開始する場合は異なります。実際、そのような場合、最終的に次のような値になりたい場合が++
あります。false
int x = -5;
while(++x)
doSomething(x);
ただし、この例では、条件付きを除くすべての場所として扱わx
れるため、次のようになります。int
int x = -5;
while(++x != 0)
doSomething(x);
x
これは、ブール値としてのみ使用するのとは異なります。