В комментариях здесь - https://stackoverflow.com/a/9393138/8047 - я обнаружил, что BOOL
ведет себя неожиданно при установке его значения из значения int
. В основном, если значение установлено на 0x1000
, оно оценивается как FALSE
(неожиданно).
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
Я думаю, что это странно, но опять же, в любом случае, я не очень сильно разыгрываю от int
до BOOL
. Тем не менее:
- Означает ли это, что
bool
предпочтительнее BOOL
? Почему или почему нет?
- Можно ли использовать
if (thatBool) {
или стоит отдать предпочтение
if (thatBool ? YES : NO) {
А почему?
Примечание: Это более конкретная версия этого вопроса: Objective-C: BOOL vs bool - но я думаю, что это добавляет к этому и не является дублировать.