Sin pensarlo me escribió algo de código para comprobar que todos los valores de una estructura se ponen a 0. Para lograr esto he utilizado:valores de encadenamiento de Bool dan resultado contrario al esperado
bool IsValid() {
return !(0 == year == month == day == hour == minute == second);
}
donde todos los miembros de la estructura eran de tipo sin signo corto. Usé el código como parte de una prueba más grande, pero me di cuenta de que volvía falso para valores que diferían de cero y verdadero para valores que eran todos iguales a cero, lo contrario de lo que esperaba.
he cambiado el código para leer:
bool IsValid() {
return (0 != year) || (0 != month) || (0 != day) || (0 != hour) || (0 != minute) || (0 != second);
}
pero me gustaría saber qué causó el comportamiento extraño. ¿Es un resultado de precedencia? Intenté buscar esta respuesta en Google, pero no encontré nada, si hay alguna nomenclatura para describir el resultado, me encantaría saberlo.
Compilé el código usando VS9 y VS8.
Sin darse cuenta tropezó con las reglas de promoción integral. Un bool puede ser promovido a un entero, por lo que la prueba 'bool == int' es válida ... incluso si es extremadamente contrario a la intuición. Ah! –
Como nota, 'a == b == c == d == 0' funcionaría en Python. – liori