使用双逻辑非(!!)运算符困惑
这个问题在这里已经有了答案:
这不像双重否定那么简单。 例如,如果您有x == 5 ,然后应用两个! 运算符( !!x ),它将变为1 - 因此,它用于标准化{0, 1}范围内的布尔值。
请注意,您可以使用零作为布尔值false,布尔值使用非零值true,但您可能需要将结果标准化为0或1,那就是当!! 是有用的。
它与x != 0 ? 1 : 0相同x != 0 ? 1 : 0 x != 0 ? 1 : 0 。
此外, 请注意,如果foo不在{0, 1}集合中{0, 1} 则不会发生这种情况 :
!!foo == foo
#include <iostream>
using namespace std;
int main()
{
int foo = 5;
if(foo == !!foo)
{
cout << "foo == !!foo" << endl;
}
else
{
cout << "foo != !!foo" << endl;
}
return 0;
}
打印foo != !!foo 。
它可以用作简写将foo转换为布尔表达式。 出于某种原因,您可能想要将非布尔表达式专门变为true或false。
foo = !!foo如果foo非零, foo变为1 ,如果它已经是0则将其保留为0 。
如果foo != 0 ,那么!!foo == 1 。 这基本上是一个转换为布尔的技巧。
