我正在看一些第三方代码,我不确定一行代码到底在做什么。我不能发布确切的代码,但它是这样的:
bool function(float x)
{
float f = doCalculation(x);
return x > 0 ? f : std::numeric_limits<float>::infinity();
}这显然抛出了来自编译器的关于转换float->bool的警告,但是实际的行为是什么呢?可视化C++如何将浮点数转换为布尔值?至少我应该能够取代那个讨厌的无穷大。
发布于 2009-12-28 22:09:31
我认为这是一个错误。该函数应该返回一个浮点数。这在我看来是合乎逻辑的。
将float转换为bool与float != 0相同。然而,由于精度的原因,严格比较两个浮点并不总是如您所期望的那样。
发布于 2009-12-28 23:29:27
如果一个浮点型的==是0.0f,那么它就会被转换成false,但是要注意精度!否则它将被转换为true --如果它不是精确的0.0f,它也将是true!Inifinity也将转换为true。正如David Thornley提到的,你的例子是非常糟糕的代码。
发布于 2009-12-28 22:09:50
我一般是这样做的
return x != 0;https://stackoverflow.com/questions/1969620
复制相似问题