猿问

Objective-C:BOOL vs bool

Objective-C:BOOL vs bool

我看到了“新型” BOOLYESNO)。

我读到这种类型几乎就像一个字母。

为了测试,我做了:

NSLog(@"Size of BOOL %d", sizeof(BOOL));NSLog(@"Size of bool %d", sizeof(bool));

很高兴看到两个日志都显示“1”(有时在C ++中bool是一个int,其sizeof是4)

所以我只是想知道bool类型是否存在某些问题?

我可以在不失速度的情况下使用bool(看似有效)吗?


慕码人2483693
浏览 532回答 3
3回答

缥缈止盈

如上所述,BOOL是一个签名字符。bool - 来自C99标准(int)的类型。BOOL - 是/否。bool - 真/假。见例子:bool b1 = 2;if (b1) printf("REAL b1 \n");if (b1 != true) printf("NOT REAL b1 \n");BOOL b2 = 2;if (b2) printf("REAL b2 \n");if (b2 != YES) printf("NOT REAL b2 \n");结果是REAL b1 REAL b2 NOT REAL b2注意bool!= BOOL。以下结果仅为ONCE AGAIN - REAL b2b2 = b1;if (b2) printf("ONCE AGAIN - REAL b2 \n");if (b2 != true) printf("ONCE AGAIN - NOT REAL b2 \n");如果你想将bool转换为BOOL,你应该使用下一个代码BOOL b22 = b1 ? YES : NO; //and back - bool b11 = b2 ? true : false;所以,在我们的案例中:BOOL b22 = b1 ? 2 : NO;if (b22)    printf("ONCE AGAIN MORE - REAL b22 \n");if (b22 != YES) printf("ONCE AGAIN MORE- NOT REAL b22 \n");那么......我们现在得到了什么?:-)

MYYA

在撰写本文时,这是objc.h的最新版本:/// Type to represent a boolean value.#if (TARGET_OS_IPHONE && __LP64__)  ||  TARGET_OS_WATCH#define OBJC_BOOL_IS_BOOL 1typedef bool BOOL;#else#define OBJC_BOOL_IS_CHAR 1typedef signed char BOOL; // BOOL is explicitly signed so @encode(BOOL) == "c" rather than "C" // even if -funsigned-char is used.#endif这意味着在64位iOS设备和WatchOS BOOL上完全相同,bool而在所有其他设备(OS X,32位iOS)上,它signed char甚至无法被编译器标志覆盖-funsigned-char它还意味着此示例代码将在不同平台上以不同方式运行(我自己测试):int myValue = 256;BOOL myBool = myValue;if (myBool) {    printf("i'm 64-bit iOS");} else {    printf("i'm 32-bit iOS");}BTW从未分配之类的东西array.count来BOOL的变量,因为可能值的约0.4%将是负面的。
随时随地看视频慕课网APP
我要回答