C++ 为什么要使用两个'';布尔值上的运算符?
可能重复:C++ 为什么要使用两个'';布尔值上的运算符?,c++,boolean,C++,Boolean,可能重复: 当我扫描Webkit源代码时,我发现布尔“not”操作符的用法很奇怪: BOOL enabled; if (SUCCEEDED(sharedPreferences->continuousSpellCheckingEnabled(&enabled))) continuousSpellCheckingEnabled = !!enabled; if (SUCCEEDED(sharedPreferences->grammarCheckingEnabled(&am
当我扫描Webkit源代码时,我发现布尔“not”操作符的用法很奇怪
代码>:
BOOL enabled;
if (SUCCEEDED(sharedPreferences->continuousSpellCheckingEnabled(&enabled)))
continuousSpellCheckingEnabled = !!enabled;
if (SUCCEEDED(sharedPreferences->grammarCheckingEnabled(&enabled)))
grammarCheckingEnabled = !!enabled;
为什么他们不直接使用启用的而不是!!启用
?这意味着强制将值设置为布尔值。因此,如果该值的计算结果为某个值,您将得到true。最有可能的是continuousSpellCheckingEnabled是bool类型。BOOL定义为int,因此:
continuousSpellCheckingEnabled = enabled;
发出警告,同时:
continuousSpellCheckingEnabled = !!enabled;
没有
为什么他们不直接使用“启用”
双反运算仅对布尔值(0和1)进行抵消,因此!!(0)==0
对于非布尔值,该值将转换为布尔值!!(100)=1</Calp>< P>这是一个C++技巧,将任何东西转换为<代码> 1 <代码>或<代码> 0 < /C> > < /P>
例如,42
在逻辑上是true
,但不是1
,因此应用
将其转换为1
它强制将真值精确为1
在布尔上下文中(if(x)
,while(x)
,x?a:b
,for(;x;)
),值0
表示假,而任何其他值表示真
如果您的函数接受一个真值,但您需要正好1,代码>很好
换句话说,!!x与x相同吗?1:0
这里没有明确提到它,但是BOOL
很可能是某种整数。根据successed
,我假设winapi,其中的int
+1解释了为什么可能需要转换为{0,1}