可能重复:
C++代码中的双重否定
让我们说:
bool var = !!true;
Run Code Online (Sandbox Code Playgroud)
它将为变量赋予"true".似乎没用,但我看的是Visual Studio对"断言"的定义,它是:
#define assert(_Expression) (void)( (!!(_Expression)) || (_wassert(_CRT_WIDE(#_Expression), _CRT_WIDE(__FILE__), __LINE__), 0) )
Run Code Online (Sandbox Code Playgroud)
为什么它两次否定"_Expression"?
我想知道他们想强迫"!" 要调用的运算符(在它超载的情况下),但这似乎不是一个好理由.
!!
保证结果最终为1或0,而不仅仅是_Expression
或0 的值.在C中,它不太重要,但在C++中我认为它将表达式的结果转换为bool
类型,这可能是在某些情况下有用.如果你确实有一些API要求传递文字1或0,那么使用!!
它将是一种实现它的方法.