En los viejos tiempos de C, no había tipo booleano. La gente usaba el int
para almacenar datos booleanos, y funcionaba principalmente. Zero era falso y todo lo demás era cierto.
Esto significaba que si tomabas int flag = 0;
y luego lo hacías , flag++
el valor sería verdadero. Esto funcionaría sin importar cuál fuera el valor de la marca (a menos que lo hicieras mucho, se volcó y volviste a cero, pero ignoremos eso) : el incremento de la bandera cuando su valor era 1 daría 2, que todavía era cierto.
Algunas personas usaron esto para establecer incondicionalmente un valor booleano en verdadero. No estoy seguro de que alguna vez se haya vuelto idiomático , pero está en algún código.
Esto nunca funcionó --
, porque si el valor fuera distinto de 1 (que podría ser), el valor aún no sería falso. Y si ya era falso ( 0
) e hiciste un operador de decremento, no sería falso.
Al mover el código de C a C ++ en los primeros días, era muy importante que el código C incluido en C ++ todavía pudiera funcionar. Y así, en la especificación para C ++ (sección 5.2.6 (está en la página 71)) se lee:
El valor obtenido al aplicar un postfix ++ es el valor que tenía el operando antes de aplicar el operador. [Nota: el valor obtenido es una copia del valor original] El operando será un valor modificable. El tipo del operando será un tipo aritmético o un puntero a un tipo de objeto completo. Después de anotar el resultado, el valor del objeto se modifica agregando 1, a menos que el objeto sea de tipo bool
, en cuyo caso se establece en verdadero. [Nota: este uso está en desuso, ver anexo D.]
El operando de postfix - se decrementa de manera análoga al operador postfix ++, excepto que el operando no será de tipo bool
.
Esto se menciona nuevamente en la sección 5.3.2 (para el operador de prefijo - 5.2.6 estaba en postfix)
Como puede ver, esto está en desuso (Anexo D en el documento, página 709) y no debe usarse.
Pero por eso. Y a veces puedes ver el código. Pero no lo hagas.