Я нашел код, похожий на следующий:
BOOL hasValue_:1;
- (BOOL) hasValue {
return !!hasValue_;
}
- (void) setHasValue:(BOOL) value {
hasValue_ = !!value;
}
Мне интересно, почему нужны двойные восклицательные знаки? Разве мы не передаем BOOL методу и не возвращаем BOOL? Является ли BOOL действительно typedef для int?
Спасибо!
ИЗМЕНИТЬ
Спасибо за все ответы. Я понимаю, что используя!! с другими типами данных эффективно выполняет некоторое приведение к логическому результату. Однако в приведенном выше примере я строго работаю с BOOL уже.
ИЗМЕНИТЬ
Если я уже работаю с BOOL, зачем нужно нормализовать его на 0 для false и 1 для true? Разве BOOL не гарантирует, что она ложна для 0 и истинна для всего остального?