我看到一些像这样的 C++ 代码:
bool MyProject::boo(...)
{
bool fBar = FALSE;
....
return !!fBar;
}
我想不出fBar
在这种情况下直接返回和返回之间有什么区别!!fBar
。两个负面因素如何产生影响?
谢谢
我看到一些像这样的 C++ 代码:
bool MyProject::boo(...)
{
bool fBar = FALSE;
....
return !!fBar;
}
我想不出fBar
在这种情况下直接返回和返回之间有什么区别!!fBar
。两个负面因素如何产生影响?
谢谢
fBar
在您的示例中,返回和返回之间没有区别!!fBar
。
在其他情况下,例如,当使用用户定义的类型(例如BOOL
( typedef
-ed to be int
) 时,该!!
构造具有将任何非零值强制为true
;的效果。即!!fBar
相当于fBar ? true : false
。如果fBar
can 为 5 并且您想将其与TRUE
定义为 的 进行比较,这可能会有所不同(BOOL)1
。
这通常是为了避免在非布尔值必须转换为bool
类型的情况下出现编译器警告。当非布尔值隐式转换为bool
. 抑制此警告的一种方法是使用显式转换。另一种方法是使用!!
组合。
但是,在您的情况下,参数 ofreturn
已经声明为 a bool
,这意味着上述推理不适用。(你确定它是bool
不是,比如说,BOOL
?)。在那种情况下,没有有意义的解释!!
。
!!
"is" "to boolean" 运算符(不是真的,它是两个否定运算符)。这种情况没有什么不同。但是,如果不是,它会有所不同bool
。
例如
int fBar = 2; // !!fBat evaluate to 1
bool b = (fBar == true) // this is false
b = fBar; // this is true
b = !!fBar; // this is also true
typedef int MyBool; // say some library use int as boolean type
#define MY_TRUE 1
#define MY_FALSE 0
MyBool b2 = fBar; // this evaluate to true, but not equal to true
if (b2 == MY_TRUE )
{
// this code will not run, unexpected
}
if (b2)
{
// this code will run
}
MyBool b3 = !!fBar;
if (b2 == MY_TRUE )
{
// this code will run
}
if (b2)
{
// this code will run
}