相关疑难解决方法(0)

C++代码中的双重否定

我刚刚进入一个拥有相当庞大代码库的项目.

我主要处理C++,他们编写的很多代码都使用布尔逻辑的双重否定.

 if (!!variable && (!!api.lookup("some-string"))) {
       do_some_stuff();
 }                                   
Run Code Online (Sandbox Code Playgroud)

我知道这些人都是聪明的程序员,很明显他们不会偶然这样做.

我不是经验丰富的C++专家,我唯一猜测他们这样做的原因是他们想要绝对肯定被评估的值是实际的布尔表示.所以他们否定它,然后再次否定它以使其恢复到它的实际布尔值.

这是正确的,还是我错过了什么?

c++ boolean

116
推荐指数
8
解决办法
3万
查看次数

C中的双重否定:是否保证返回0/1?

是否!!(x)保证标准返回0/1?

请注意,我不是在询问c ++,其中定义了bool类型.

c standards

38
推荐指数
2
解决办法
5058
查看次数

为什么用!!(条件)代替(条件)?

我见过人们使用带有两个'!'的条件子句的代码

#define check_bit(var, pos)       (!!((var) & (1 << (pos))))
#define likely(x)       __builtin_expect(!!(x),1)
#define unlikely(x)     __builtin_expect(!!(x),0)
Run Code Online (Sandbox Code Playgroud)

是我能找到的一些例子.

使用!!(condition)结束有什么好处(condition)吗?

c logical-operators

35
推荐指数
2
解决办法
2285
查看次数

标签 统计

c ×2

boolean ×1

c++ ×1

logical-operators ×1

standards ×1