有什么区别!! 没别的了?

jae*_*ong 0 c c++ java

有时,我看到以下代码:

if ( !!on_debugging ) 
Run Code Online (Sandbox Code Playgroud)

这是一样的

if ( on_debugging )
Run Code Online (Sandbox Code Playgroud)

我不明白为什么要使用这两个.有什么区别吗?

Pau*_*per 7

!!a几乎相当于a.它将其转换为布尔值.

通常情况下这并没有什么不同,但有时它会有所不同.

#include <iostream>

int a(int x) {
    return 1;
}

int a(bool x) {
    return 2;
}


int main() {
    std::cout << a(0) << std::endl;   //prints 1
    std::cout << a(!!0) << std::endl; //prints 2

    std::cout << -1 << std::endl;   //prints -1
    std::cout << !!-1 << std::endl; //prints 1

}
Run Code Online (Sandbox Code Playgroud)

在你的情况下,没有区别,除非有超载.(但即使有超载,我希望没有区别.)

(仅供参考,这在Javascript中更常见,因为它的类型,例如false != null但是false == !!null.我包含此注释因为您使用C,C++和Java标记了您的问题,并且Javascript共享相似的语法.)