这个问题扩展了 为什么使用!!将 int 转换为 bool 时? .
当我做类似的事情时,我认为我很酷:
bool hasParent() {
return this->parentNode;
}
其中 this->parentNode
是 NULL
当没有父节点时。
但我得到:
警告 C4800:“节点 *”:强制值为布尔值“真”或“假”(性能警告)
即使使用 (bool) 强制转换,警告仍然不会消失。
有什么关系,哟?为什么这是性能警告?我认为写这样的东西效率会降低:
bool hasParent() {
if (this->parentNode)
return true;
else
return false;
}
但是第二个版本没有产生任何警告,编译器似乎更开心了。哪个更快?
原文由 bobobobo 发布,翻译遵循 CC BY-SA 4.0 许可协议
Microsoft Connect 上对此进行了讨论( 在 C++ 中转换为 bool 的性能影响是什么? )。给微软的例子是:
微软的回应(来自负责警告的开发人员)是:
所以基本上 MS 开发人员似乎在说,如果你想将
int
“投射”到bool
你应该更正确地使用“return this->parentNode != 0
”而不是隐式或显式强制转换。就个人而言,我很想知道更多关于警告发现什么样的错误。我认为这个警告不会有很大的价值。