【问题标题】:Objective C - BOOL cast nil or NOObjective C - BOOL cast nil 或 NO
【发布时间】:2013-06-26 09:05:45
【问题描述】:

也许是愚蠢的问题:

NSString *var = @"test";
if (var) {

这里 var 被转换为 BOOL 并与 YES 进行比较,不是吗?

当转换为BOOL而不是nilNO时,是否还有其他值可以转换为NO

【问题讨论】:

  • 所有类似 C 的比较都提升为 _Bool (int),而不是 BOOL (signed/unsigned char)
  • @CodaFi 不,他们不是。升级到int

标签: objective-c if-statement casting boolean


【解决方案1】:

这里var 被转换为BOOL 并与YES 进行比较,不是吗?

不,不是,为什么会这样?

当转换为 BOOL 时,除了 nil 和 NO 之外,还有其他值可以转换为 NO 吗?

任何零值的整数表达式都可以完成这项工作。

【讨论】:

  • 供参考:如果表达式被自动评估为 BOOL,那么 signed char 对指针所做的切片将是一场灾难。
  • @CodaFi 是的。由于对齐,0xf00bar00 和非NULL 突然变为 false。
  • 再强调一点 NO 只是 0 的一种形式,可能值得回忆一下 BOOL 是如何定义的:typedef signed char BOOL;#define YES ((BOOL)1) #define NO ((BOOL)0)。跨度>
  • @H2CO3 “不,不是,为什么会这样?”例如,要知道该语句是否有效。那么你能告诉我声明是如何验证的吗?它是否只是检查内存中的值是否不等于0
  • @PierredeLESPINAY 不,它检查指针是否不是NULL。如果是,那就是假的,如果不是,那就是真的。
猜你喜欢
  • 1970-01-01
  • 2010-11-16
  • 2012-03-15
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
  • 2016-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多