它来自使用整数值作为布尔值的历史。
Ifx是一个int,但我将它用作布尔值,if(x)...然后递增将意味着无论它在操作之前的真值如何,它都将true在它之后具有一个真值(除非溢出)。
但是,不可能--仅预测给定知识的结果 的真值x,因为它可能导致false(如果积分值为 1)或true(如果积分值为其他任何值 - 特别是这包括 0 [ false] 和 2 或更多 [ true])。
所以作为一个短手++工作,并--没有。
++为了与此兼容,允许在 bool 上使用,但在标准中已弃用它,并在 C++17 中将其删除。
这假设我只用作x布尔值,这意味着溢出不会发生,直到我++经常完成足以导致它自己的溢出。即使使用 char 作为使用的类型并且CHAR_BITS像 5 这样的低值,在这不再起作用之前是 32 次(这仍然足以证明它是一种不好的做法,我不是为这种做法辩护,只是解释它为什么起作用)对于 32 位int,我们当然必须使用++2^32 次才能成为问题。--虽然它只会导致如果我以false1 的值true开始,或者以 0 开始并且++之前精确使用过一次。
如果我们从一个略低于 0 的值开始,情况就不同了。确实,在这种情况下,我们可能希望最终++得到该false值,例如:
int x = -5;
while(++x)
doSomething(x);
但是,此示例将除条件之外的任何地方都x视为一个int,因此它等效于:
int x = -5;
while(++x != 0)
doSomething(x);
这与仅用x作布尔值不同。