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