为什么要用两个'!' 运算符的布尔值?

Jia*_*jun 12 c++ boolean

可能重复:
C++代码中的双重否定

当我扫描Webkit源代码时,我发现了一个奇怪的使用布尔"not"运算符!:

BOOL enabled;
if (SUCCEEDED(sharedPreferences->continuousSpellCheckingEnabled(&enabled)))
    continuousSpellCheckingEnabled = !!enabled;
if (SUCCEEDED(sharedPreferences->grammarCheckingEnabled(&enabled)))
    grammarCheckingEnabled = !!enabled;
Run Code Online (Sandbox Code Playgroud)

他们为什么不enabled直接使用而不是!!enabled

Luc*_*ore 14

这是将C++转换为1或的任何C++技巧0.

例如,42逻辑上true,但不是1,所以申请!!它,你把它变成1.


Gri*_*air 5

它的意思是将值强制为布尔值.因此,如果价值正在评估某事,那么你就会成真.