En los comentarios aquí - https://stackoverflow.com/a/9393138/8047 - Descubrí que BOOL
tiene un comportamiento inesperado al establecer su valor a partir de un valor int
. Sobre todo, si el valor se establece en 0x1000
se evalúa como FALSE
(sorprendentemente).Implicaciones de los valores int no "ajustados" - bool o BOOL para Objective-C?
NSLog(@"All zero? %d %d", (BOOL)0, (bool)0);
NSLog(@"All one? %d %d %d", (BOOL)4095, (BOOL)4096, (BOOL)4097); // 4096=0x1000 or 8-bits
NSLog(@"All one? %d %d %d", (bool)4095, (bool)4096, (bool)4097);
Produces:
All zero? 0 0
All one? -1 0 1
All one? 1 1 1
creo que esto es extraño, pero de nuevo, no lo echa de la int
a BOOL
mucho de todos modos. Sin embargo:
- ¿Esto implica que
bool
se prefiere aBOOL
? ¿Por qué o por qué no? - ¿es correcto utilizar
if (thatBool) {
o debería preferir uno
if (thatBool ? YES : NO) {
Y por qué?
Nota: Esta es una versión más específica de esta pregunta de esto - Objective-C : BOOL vs bool - pero creo que se agrega y no es un duplicado.
Cualquier enlace sobre el truco de lanzamiento '!!'? Estas cosas son un poco difíciles de buscar :) –
Es una simple [doble negación] (http://www.google.com/search?q=c+double+negation), que debería ser más fácil de buscar. – zoul
Gracias @zoul, sí, eso es bastante fácil. Creo que 'observar los modelos peligrosos' es correcto. –