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

Ren*_*ert 15 c c++

可能重复:
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"?

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

Car*_*rum 7

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