相关疑难解决方法(0)

PHP中的Double not(!!)运算符

double not运算符在PHP中做什么?

例如:

return !! $row;
Run Code Online (Sandbox Code Playgroud)

上面的代码会做什么?

php operators

179
推荐指数
4
解决办法
4万
查看次数

为什么对bool的cast指针有性能警告?

延伸.

当我做了类似的事情时,我以为我很酷

bool hasParent()
{
  return this->parentNode ;
}

即使有(布尔)演员,警告仍然不会消失.

当没有父节点时this-> parentNode为NULL.

但是我得到了:

warning C4800: 'Node *' : forcing value to bool 'true' or 'false' (performance warning)

这是什么交易,哟?为什么这是表现警告?我认为不写下这样的东西会更有效率:


bool hasParent()
{
  if( this->parentNode )
    return true ;
  else
    return false ;
}

但第二个版本没有产生警告,编译器似乎更快乐.哪个更快?

c++ performance casting

53
推荐指数
4
解决办法
2万
查看次数

是!! 在C++中转换为bool的安全方法?

[这个问题有关,但并不等同于这一个 ]

如果我尝试使用某些类型的值作为布尔表达式,我会收到警告.我有时使用三元运算符(?:)转换为bool 而不是抑制警告.使用两个not运算符(!!)似乎做同样的事情.

这就是我的意思:

typedef long T;       // similar warning with void * or double
T t = 0;
bool b = t;           // performance warning: forcing 'long' value to 'bool'
b = t ? true : false; // ok
b = !!t;              // any different?
Run Code Online (Sandbox Code Playgroud)

那么,双重技术真的做同样的事吗?它比三元技术更安全吗?这是技术与非整数类型(例如,具有同样安全void *doubleT)?

我不是在问好!!t风格.我在问它是否在语义上不同于t ? true : false.

c++ boolean visual-c++

49
推荐指数
6
解决办法
2万
查看次数

警告C4800:'int':强制值为bool'true'或'false'(性能警告)

我的代码中有这个问题:

bool CBase::isNumber()
{
return (id & MID_NUMBER);
}

bool CBase::isVar()
{
return (id & MID_VARIABLE);
}

bool CBase::isSymbol()
{
return (id & MID_SYMBOL);
}
Run Code Online (Sandbox Code Playgroud)

c++ visual-c++-2008 visual-c++-2010

30
推荐指数
2
解决办法
3万
查看次数

C4800有没有真正的世界价值?

如下所述的microsoft c ++编译器中的C4800警告:

https://msdn.microsoft.com/en-us/library/b6801kcy.aspx

制作此代码:

// C4800.cpp
// compile with: /W3
int main() {
  int i = 0;

 // try..
 // bool i = 0;

  bool j = i;   // C4800
  j++;
}
Run Code Online (Sandbox Code Playgroud)

抛出C4800警告:"'type':强制值为bool'true'或'false'(性能警告)"

微软似乎认为这是一个相当重要的,并将其作为Level3警告,但Clang显然认为不是这样,因为对它的最大警告水平没有任何投诉.

是否有任何人可以提出的现实世界的错误,C4800会指出这会让它值得启用吗?

c++ clang

5
推荐指数
1
解决办法
213
查看次数