Según 4,7 (conversiones integral), párrafo 4, "Si el tipo de destino es bool
, ver 4.12.Si el tipo de fuente es bool
, el valor false
se convierte a cero y el valor true
se convierte en uno. "En 4.12," Un valor de aritmética, enumeración, puntero o puntero al tipo de miembro se puede convertir a un valor de tipo r bool
. Un valor cero, valor de puntero nulo o valor de puntero de miembro nulo se convierte a false
; cualquier otro valor se convierte a true
."
En un contexto en bool
operandos no son permitidos pero operandos integrales están, la bool
serán convertidos a un tipo integral. Cuando el resultado entero se almacena en una variable bool
, será . puede convertir en bool
Por lo tanto, usted será capaz de utilizar + y * como booleano OR y AND, y se puede usar | & y también que no puede salirse con la mezcla de ellos, como (+ Bool1 Bool2.) & bool3 dará false
si las tres variables son true
. ((1 + 1) & 1 es 2 & 1, que es 0 o falso.)
Recuerde que | y || no funcionan de manera idéntica, incluso aquí. | evaluará ambos lados, y luego evaluará el bit a bit o. || evaluará el primer operando, entonces solo si eso fue falso evaluará el segundo.
No voy a discutir los temas estilísticos aquí, pero si hiciera algo así, me aseguraría de comentarlo para que la gente supiera lo que estaba haciendo y por qué.
increíble, gracias. Yo votaría dos veces si pudiera –
+1 por citar el estándar (y respondiendo la pregunta), mientras también agrego el comentario sobre el estilo – Gabe