因为C语言中,所有非0值都表示“真”。所以!非0值 = 0,而!0 = 1。双感叹号!!作用就是非0值转成1,而0值还是0.双感叹号!!是为了把"非0值"转换成1,而0值还是0。!!不难理解,举例:
!!(expression) 等价于!(!expression)。如果express是一个指针,最终结果就是1.这样!!(expression)可以给bool变量赋值了。
用法举例:对于一个判断的函数如下,老的写法可能是这样:
- (BOOL)isLaunched { if(self.launchCache) return yes; else return NO; return NO; }
如果使用!!,则是这样
- (BOOL)isLaunched { return !!self.launchCache; }
所以,本人觉得!!只是节省了代码,如果是if语句可以不必要这么写,但是上面!!的写法,确实节省了代码的行数。
还有一些其他场景:比如一个开关,当某个数值大于0的时候,就打开,等于0的时候就关闭,使用!!可以一行代码搞定。
类似这样节省代码行数的特别用法还有三目运算符省略中间表达式的写法(exp1?:exp2)详见这里
时间: 2024-08-04 05:21:31