¿Por qué el operador --no existe para bool mientras que sí existe para el operador ++?
Lo intenté en C ++, y no sé si mi pregunta se aplica a otro idioma. Estaré encantado de saber también.
Lo sé , puedo usar el operador ++con un bool. Hace que cualquier bool sea igual a verdadero.
bool b = false;
b++;
// Now b == true.
¿Por qué no podemos usar el operador --de manera opuesta?
bool b = true;
b--;
// Now b == false;
No es muy útil, pero tengo curiosidad.

Respuestas:
En los viejos tiempos de C, no había tipo booleano. La gente usaba el
intpara 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:
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.
fuente
Para hacer frente parcialmente al código heredado que usaba
into similar como su tipo booleano.fuente
Para comprender el significado histórico de esta pregunta, debe considerar el caso de Therac-25. El Therac-25 era un dispositivo médico que administraba radiación a pacientes con cáncer. Estaba plagado de malas prácticas de programación que contribuyeron a su pobre historial de seguridad (con múltiples muertes atribuidas).
http://courses.cs.vt.edu/professionalism/Therac_25/Therac_1.html
(vaya al final de la página 3)
Therac-25 usó algo como el equivalente de
operator++en abool. Sin embargo, el lenguaje de programación que usaron no era C ++, y su tipo de datos no lo erabool. Sin embargo, a diferencia de la garantía en C ++, un tipo entero normal simplemente sigue subiendo. Su tipo de datos era el equivalente deuint8_t.C ++ decidió mantener el
operator++margen para las personas acostumbradas a programar de esta manera, pero en lugar de aumentar el valor, simplemente lo configuratruepara evitar cosas como esta.Tenga en cuenta que
operator++(bool)está en desuso.http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3797.pdf
Anexo D de C ++ 14:
fuente
booltipo. Solo estaba tratando de dar un ejemplo histórico de cuándo las personas realmente programaban de esta manera.