gpt4 book ai didi

objective-c - 什么!!在 objective-c 语法中是什么意思?

转载 作者:太空狗 更新时间:2023-10-30 03:15:37 24 4
gpt4 key购买 nike

我发现了一些类似于下面的代码:

BOOL hasValue_:1;

- (BOOL) hasValue {
return !!hasValue_;
}

- (void) setHasValue:(BOOL) value {
hasValue_ = !!value;
}

我想知道为什么需要两个感叹号?我们不是已经将 BOOL 传递给方法并返回 BOOL 了吗? BOOL 真的是 int 的类型定义吗?

谢谢!

编辑
感谢迄今为止的所有回复。我明白使用!!与其他数据类型有效地对 bool 结果执行一些类型转换。但是,在上面的示例中,我已经严格使用 BOOL。

编辑
如果我已经在使用 BOOL,为什么有必要将其标准化为 0 表示假,1 表示真? BOOL 不能保证它对 0 为假而对其他一切都为真吗?

最佳答案

I'm wondering why the double exclamation points are necessary?

BOOL 是一个 signed char,或者一个 char 通过 typedef 伪装成 boolean 类型。它很乐意表示 [SCHAR_MIN...SCHAR_MAX] 范围内的任何整数。双感叹号进行了两次boolean NOT运算,有效地将原始值转换为0或1的int,将值缩小到boolean的范围内。

但是有一个转折点:BOOL hasValue_:1; 声明了一个单位位域表示。它可以表示两个值。 return !!hasValue_; 是不需要的。但是,当从 signed char (BOOL) 变为一位时,需要正确缩小。

Are we not already passing BOOL to the method and returning BOOL?

没有。这是一个 signed char!!value 将输入值减少为 YESNO

If I'm working with a BOOL already, why is it necessary to normalize it to a 0 for false and 1 for true?

Doesn't a BOOL guarantee that it is false for 0 and true for everything else?

BOOL 是一个signed charsigned chartypedef 不提供此保证。

C99(在针对 osx 或 ios 时已可供您使用多年)具有更有用的 bool 类型表示 (bool)。不幸的是,由于历史原因,BOOL 在 objc 中仍然经常使用。就个人而言,我仅在必要时(例如覆盖)才使用 BOOL

关于objective-c - 什么!!在 objective-c 语法中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5595858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com