【发布时间】:2012-03-15 01:02:05
【问题描述】:
在这里的 cmets 中 -- 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 -- 但我认为它增加了它并且不是重复的。
【问题讨论】:
标签: objective-c primitive