W komentarzach tutaj - https://stackoverflow.com/a/9393138/8047 - Odkryłem, że BOOL
ma pewne nieoczekiwane zachowanie podczas ustawiania jego wartości z wartości int
. W większości przypadków, jeśli wartość jest ustawiona na 0x1000
, zostanie ona oceniona jako niespodziewanie jako FALSE
.Implikacje wartości int nie "dopasowujących" - bool lub BOOL dla 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
Myślę, że to dziwne, ale potem znowu, nie rzucać od int
do BOOL
dużo tak. Jednakże:
- Czy to oznacza, że
bool
być korzystneBOOL
? Dlaczego lub dlaczego nie? - Czy mogę używać
if (thatBool) {
lub należy wolą
if (thatBool ? YES : NO) {
i dlaczego?
Uwaga: To jest bardziej specyficzna wersja tej kwestii to - Objective-C : BOOL vs bool - ale myślę, że dodaje się do niego i nie jest duplikatem.
Dowolny link na sztuczce castingowej !!? Te rzeczy są nieco trudne do wyszukania :) –
To prosta [podwójna negacja] (http://www.google.com/search?q=c+double+negation), która powinna być łatwiejsza do wyszukania. – zoul
Dzięki @Zoul, tak, to dość łatwe. Myślę, że "uważaj na niebezpieczne odlewy" ma rację. –