有时,我看到以下代码:
if ( !!on_debugging )
Run Code Online (Sandbox Code Playgroud)
这是一样的
if ( on_debugging )
Run Code Online (Sandbox Code Playgroud)
我不明白为什么要使用这两个.有什么区别吗?
!!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共享相似的语法.)