3

我看到一些像这样的 C++ 代码:

bool MyProject::boo(...)
{
  bool fBar = FALSE;
  ....
  return !!fBar;
}

我想不出fBar在这种情况下直接返回和返回之间有什么区别!!fBar。两个负面因素如何产生影响?

谢谢

4

3 回答 3

7

fBar在您的示例中,返回和返回之间没有区别!!fBar

在其他情况下,例如,当使用用户定义的类型(例如BOOL( typedef-ed to be int) 时,该!!构造具有将任何非零值强制为true;的效果。即!!fBar相当于fBar ? true : false。如果fBarcan 为 5 并且您想将其与TRUE定义为 的 进行比较,这可能会有所不同(BOOL)1

于 2013-11-06T00:28:47.390 回答
3

这通常是为了避免在非布尔值必须转换为bool类型的情况下出现编译器警告。当非布尔值隐式转换为bool. 抑制此警告的一种方法是使用显式转换。另一种方法是使用!!组合。

但是,在您的情况下,参数 ofreturn已经声明为 a bool,这意味着上述推理不适用。(你确定它是bool不是,比如说,BOOL?)。在那种情况下,没有有意义的解释!!

于 2013-11-06T01:09:04.517 回答
0

!!"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
}
于 2013-11-06T00:28:43.190 回答