"!!"(否定两次)的用法是什么?

What is the usage of "!!" (negating twice)?

本文关键字:用法 是什么 两次      更新时间:2023-10-16

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

比方说:

bool var = !!true;

它将为变量指定"true"。看起来没用,但我看到了Visual Studio对"断言"的定义,它是:

#define assert(_Expression) (void)( (!!(_Expression)) || (_wassert(_CRT_WIDE(#_Expression), _CRT_WIDE(__FILE__), __LINE__), 0) )

为什么它两次否定"_Expression"?

我想知道他们想强制调用"!"运算符(在它过载的情况下),但这似乎不是一个好的理由。

!!保证结果将以1或0结束,而不仅仅是_Expression或0的值。在C中,这不太重要,但在C++中,我认为它将表达式的结果转换为bool类型,这在某些情况下可能很有用。如果您确实有一些API需要将文字1或0传递给它,那么使用!!将是实现这一点的一种方法。

您可能想要一个10的int变量。

例如,你不能传递一个5,相反,双重否定会把5变成1

另外,看看TRUE是如何定义的:

#ifndef TRUE
#define TRUE                1
#endif

因此,一个类似于的表达式

int x = 5;
if ( x == TRUE )
{
   //....
}

不会通过,而

if ( x )
{
   //....
}

会的。

它的用途是确保值为0或1。我认为这对于C++的bool类型来说是多余的。