为什么要使用条件运算符生成YES和NO,而不是直接使用条件语句?

4
在 Cocoa 的 NSRange.h 中,我注意到了以下的内联函数:
NS_INLINE BOOL NSLocationInRange(NSUInteger loc, NSRange range) {
    return (!(loc < range.location) && (loc - range.location) < range.length) ? YES : NO;
}

我觉得作者使用条件运算符返回YES和NO,而不是像下面的函数一样写,这让我感到困惑:
NS_INLINE BOOL NSLocationInRange(NSUInteger loc, NSRange range) {
    return (!(loc < range.location) && (loc - range.location) < range.length);
}

为什么前者更可取呢?通常我认为这只是一种古怪的编程风格,但我想知道(可能是错误的),因为它出现在苹果的一个公共.h文件中是否有我所忽略的东西...

1个回答

4

这只是糟糕的编程风格/理解能力。不要这样做。

这经常出现在那些不正确地理解布尔值(因为它们不是数字,而且将值与数字相等)和表达式可以是布尔值的学生的作品中。

注意:(Objective-)C(++)中的布尔/逻辑运算符被定义为返回整数而不是布尔值,因此在这些语言中对布尔值的混淆是可以理解的。但是这些整数可以是0或1,分别对应false/NO和true/YES。


1
那些“学生”可能是苹果甚至是NeXT的工程师,但我同意其余部分。值得注意的是,C标准规定像&&这样的操作产生一个值为01int类型。 - DarkDust

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接